Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expected only one value per-inputId for IgnoreFilesIndex #484

Closed
BorzdeG opened this issue Oct 8, 2017 · 3 comments
Closed

Expected only one value per-inputId for IgnoreFilesIndex #484

BorzdeG opened this issue Oct 8, 2017 · 3 comments

Comments

@BorzdeG
Copy link

BorzdeG commented Oct 8, 2017

Prerequisites

plugin version: 2.2.1

IntelliJ IDEA 2017.3 EAP (Ultimate Edition)
Build #IU-173.2941.3, built on October 4, 2017
JRE: 1.8.0_152-release-1012-b1 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

Expected only one value per-inputId for IgnoreFilesIndex
Details: 482236
mobi.hsz.idea.gitignore.indexing.IgnoreEntryOccurrence@d2f6d35d
java.lang.Throwable: Expected only one value per-inputId for IgnoreFilesIndex
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:154)
	at com.intellij.util.indexing.impl.ValueContainerImpl.removeAssociatedValue(ValueContainerImpl.java:99)
	at com.intellij.util.indexing.impl.ChangeTrackingValueContainer.removeAssociatedValue(ChangeTrackingValueContainer.java:65)
	at com.intellij.util.indexing.impl.MapIndexStorage.removeAllValues(MapIndexStorage.java:250)
	at com.intellij.util.indexing.MemoryIndexStorage.removeAllValues(MemoryIndexStorage.java:179)
	at com.intellij.util.indexing.impl.MapReduceIndex$5.process(MapReduceIndex.java:292)
	at com.intellij.util.indexing.impl.CollectionInputDataDiffBuilder.differentiateWithKeySeq(CollectionInputDataDiffBuilder.java:54)
	at com.intellij.util.indexing.impl.CollectionInputDataDiffBuilder.differentiate(CollectionInputDataDiffBuilder.java:41)
	at com.intellij.util.indexing.impl.UpdateData.iterateKeys(UpdateData.java:56)
	at com.intellij.util.indexing.impl.MapReduceIndex.updateWithMap(MapReduceIndex.java:319)
	at com.intellij.util.indexing.impl.MapReduceIndex$2.compute(MapReduceIndex.java:221)
	at com.intellij.util.indexing.impl.MapReduceIndex$2.compute(MapReduceIndex.java:217)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1712)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1692)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1645)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1578)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.freezeFileTypeTemporarilyIn(FileTypeManagerImpl.java:525)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1537)
	at com.intellij.util.indexing.FileBasedIndexImpl.indexFileContent(FileBasedIndexImpl.java:1525)
	at com.intellij.util.indexing.FileBasedIndexImpl.processRefreshedFile(FileBasedIndexImpl.java:1504)
	at com.intellij.util.indexing.FileBasedIndexImpl$VirtualFileUpdateTask.doProcess(FileBasedIndexImpl.java:1660)
	at com.intellij.util.indexing.FileBasedIndexImpl$VirtualFileUpdateTask.doProcess(FileBasedIndexImpl.java:1657)
	at com.intellij.util.indexing.UpdateTask.a(UpdateTask.java:76)
	at com.intellij.util.indexing.UpdateTask.processAll(UpdateTask.java:46)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1679)
	at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:722)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:876)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:962)
	at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:933)
	at com.intellij.util.indexing.FileBasedIndexImpl.getValues(FileBasedIndexImpl.java:784)
	at mobi.hsz.idea.gitignore.indexing.IgnoreFilesIndex.getEntries(IgnoreFilesIndex.java:233)
	at mobi.hsz.idea.gitignore.IgnoreManager$2.fetch(IgnoreManager.java:142)
	at mobi.hsz.idea.gitignore.IgnoreManager$2.fetch(IgnoreManager.java:139)
	at mobi.hsz.idea.gitignore.util.CachedConcurrentMap.get(CachedConcurrentMap.java:76)
	at mobi.hsz.idea.gitignore.IgnoreManager.isFileIgnored(IgnoreManager.java:331)
	at mobi.hsz.idea.gitignore.vcs.IgnoreFileStatusProvider.getFileStatus(IgnoreFileStatusProvider.java:70)
	at com.intellij.openapi.vcs.impl.FileStatusManagerImpl.calcStatus(FileStatusManagerImpl.java:135)
	at com.intellij.openapi.vcs.impl.FileStatusManagerImpl.fileStatusChanged(FileStatusManagerImpl.java:231)
	at com.intellij.openapi.vcs.impl.VcsFileStatusProvider.refreshFileStatusFromDocument(VcsFileStatusProvider.java:140)
	at com.intellij.openapi.vcs.impl.FileStatusManagerImpl.refreshFileStatusFromDocument(FileStatusManagerImpl.java:278)
	at com.intellij.openapi.vcs.impl.FileStatusManagerImpl$3.documentChanged(FileStatusManagerImpl.java:120)
	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.EventDispatcher.dispatch(EventDispatcher.java:99)
	at com.intellij.util.EventDispatcher.access$200(EventDispatcher.java:35)
	at com.intellij.util.EventDispatcher$2.invoke(EventDispatcher.java:79)
	at com.sun.proxy.$Proxy41.documentChanged(Unknown Source)
	at com.intellij.openapi.editor.impl.DocumentImpl.a(DocumentImpl.java:782)
	at com.intellij.openapi.editor.impl.DocumentImpl.a(DocumentImpl.java:712)
	at com.intellij.openapi.editor.impl.DocumentImpl.a(DocumentImpl.java:580)
	at com.intellij.openapi.editor.impl.DocumentImpl.replaceText(DocumentImpl.java:445)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl$2.run(FileDocumentManagerImpl.java:639)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1015)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.a(FileDocumentManagerImpl.java:625)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.a(CoreCommandProcessor.java:149)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:109)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.reloadFromDisk(FileDocumentManagerImpl.java:625)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.contentsChanged(FileDocumentManagerImpl.java:607)
	at sun.reflect.GeneratedMethodAccessor126.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.EventDispatcher.dispatch(EventDispatcher.java:99)
	at com.intellij.util.EventDispatcher.access$200(EventDispatcher.java:35)
	at com.intellij.util.EventDispatcher$2.invoke(EventDispatcher.java:79)
	at com.sun.proxy.$Proxy27.contentsChanged(Unknown Source)
	at com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter.fireAfter(BulkVirtualFileListenerAdapter.java:65)
	at com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter.after(BulkVirtualFileListenerAdapter.java:56)
	at sun.reflect.GeneratedMethodAccessor123.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:443)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:404)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:393)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:381)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:372)
	at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:45)
	at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:231)
	at com.sun.proxy.$Proxy167.storageFileChanged(Unknown Source)
	at com.intellij.configurationStore.StorageVirtualFileTracker$addVfsChangesListener$1.after(StorageVirtualFileTracker.kt:108)
	at sun.reflect.GeneratedMethodAccessor123.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
	at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:443)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:404)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:393)
	at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:374)
	at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:45)
	at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:231)
	at com.sun.proxy.$Proxy24.after(Unknown Source)
	at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl$2.close(PersistentFSImpl.java:651)
	at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320)
	at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149)
	at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233)
	at com.intellij.openapi.util.JDOMUtil.write(JDOMUtil.java:386)
	at com.intellij.configurationStore.FileBasedStorageKt$doWrite$$inlined$runUndoTransparentWriteAction$1$1.compute(actions.kt:76)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1027)
	at com.intellij.configurationStore.FileBasedStorageKt$doWrite$$inlined$runUndoTransparentWriteAction$1.run(actions.kt:29)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.runUndoTransparentAction(CoreCommandProcessor.java:323)
	at com.intellij.configurationStore.FileBasedStorageKt.a(FileBasedStorage.kt:295)
	at com.intellij.configurationStore.FileBasedStorageKt.writeFile(FileBasedStorage.kt:202)
	at com.intellij.configurationStore.FileBasedStorage$FileSaveSession.saveLocally(FileBasedStorage.kt:100)
	at com.intellij.configurationStore.XmlElementStorage$XmlElementStorageSaveSession.save(XmlElementStorage.kt:151)
	at com.intellij.configurationStore.FileBasedStorage$FileSaveSession.save(FileBasedStorage.kt:85)
	at com.intellij.configurationStore.ComponentStoreImplKt.executeSave(ComponentStoreImpl.kt:485)
	at com.intellij.configurationStore.ComponentStoreImpl.doSave(ComponentStoreImpl.kt:239)
	at com.intellij.configurationStore.ProjectStoreImpl.doSave(ProjectStoreImpl.kt:334)
	at com.intellij.configurationStore.ComponentStoreImpl.save(ComponentStoreImpl.kt:196)
	at com.intellij.openapi.components.impl.stores.StoreUtil.save(StoreUtil.java:49)
	at com.intellij.openapi.project.impl.ProjectImpl.save(ProjectImpl.java:349)
	at com.intellij.openapi.components.impl.stores.StoreUtil.saveDocumentsAndProjectsAndApp(StoreUtil.java:126)
	at com.intellij.openapi.application.impl.ApplicationImpl.saveAll(ApplicationImpl.java:1425)
	at com.intellij.ide.actions.SaveAllAction.actionPerformed(SaveAllAction.java:36)
	at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:216)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:233)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:576)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.a(IdeKeyEventDispatcher.java:625)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:195)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:624)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.e(IdeKeyEventDispatcher.java:479)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:213)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:622)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:366)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
@hsz
Copy link
Member

hsz commented Oct 11, 2017

@BorzdeG Thanks.

Is it possible for you to reproduce this issue? If so, what are the steps?

@nicity
Copy link

nicity commented Oct 19, 2017

I suspect that the problem is caused by mutability of Value class used in IDE's index.
IgnoreEntryOccurrence class should be persistently immutable.
E.g. it does mean that deserialized instance of IgnoreEntryOccurrence when file was removed is equals (and have the same hashcode) with instance of IgnoreEntryOccurrence when file exists.
I think that this issue causes other problems on IDE side, e.g. https://youtrack.jetbrains.com/issue/IDEA-180296

@hsz
Copy link
Member

hsz commented Oct 30, 2017

@BorzdeG @nicity

Fix has been released with v2.3.0-RC.1 on EAP channel.
Previously hashcode was built using real file object - now I just use the URL (protocol + full path) so we should avoid this change.
In addition, I don't create file's object during the deserialization - it's done on demand when something requires this file.

Can you please check if it's working fine?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants