diff --git a/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy b/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy index db7f6efb0e61..b7d48a3444be 100644 --- a/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy +++ b/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy @@ -43,6 +43,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.impl.PsiManagerEx import com.intellij.psi.impl.cache.impl.id.IdIndex import com.intellij.psi.impl.cache.impl.id.IdIndexEntry +import com.intellij.psi.impl.cache.impl.id.IdIndexImpl import com.intellij.psi.impl.file.impl.FileManagerImpl import com.intellij.psi.impl.java.stubs.index.JavaStubIndexKeys import com.intellij.psi.impl.source.JavaFileElementType @@ -443,6 +444,24 @@ class IndexTest extends JavaCodeInsightFixtureTestCase { assertTrue(stamp != ((FileBasedIndexImpl)FileBasedIndex.instance).getIndexModificationStamp(IdIndex.NAME, project)) } + void "test snapshot index in memory state after commit of unsaved document"() throws IOException { + final VirtualFile vFile = myFixture.addClass("class Foo {}").getContainingFile().getVirtualFile() + def classEntry = new IdIndexEntry("class", true) + def findValueProcessor = { file, value -> file != vFile } as FileBasedIndex.ValueProcessor + + def projectScope = GlobalSearchScope.projectScope(project) + def result = FileBasedIndex.instance.processValues(IdIndexImpl.NAME, classEntry, null, findValueProcessor, + projectScope) + assertFalse(result) + + final Document document = FileDocumentManager.getInstance().getDocument(vFile) + document.setText("") + PsiDocumentManager.getInstance(project).commitAllDocuments() + result = FileBasedIndex.instance.processValues(IdIndexImpl.NAME, classEntry, null, findValueProcessor, + projectScope) + assertTrue(result) + } + void "test no stub index stamp update when no change"() throws IOException { final VirtualFile vFile = myFixture.addClass("class Foo {}").getContainingFile().getVirtualFile() def stamp = ((StubIndexImpl)StubIndex.instance).getIndexModificationStamp(JavaStubIndexKeys.CLASS_SHORT_NAMES, project) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java index b62e0b5db016..ac81337b39af 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java @@ -107,6 +107,10 @@ public class VfsAwareMapReduceIndex extends MapReduceIndex(inputId, keys); } } + + if (mySnapshotInputMappings != null) { + return new MapInputDataDiffBuilder<>(inputId, mySnapshotInputMappings.readInputKeys(inputId)); + } } if (myForwardIndex != null) { return getKeysDiffBuilder(inputId);