From 3ca59827b47687c87619e3852768509a1444ea82 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 10 Jun 2015 23:29:46 +0200 Subject: [PATCH] stub psi mismatch (IDEA-141285) --- .../intellij/index/ConcurrentIndexTest.groovy | 44 ++++++++++++++++++- .../util/indexing/MemoryIndexStorage.java | 8 ++-- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/index/ConcurrentIndexTest.groovy b/java/java-tests/testSrc/com/intellij/index/ConcurrentIndexTest.groovy index 2b94e5a42c23..348d793e8652 100644 --- a/java/java-tests/testSrc/com/intellij/index/ConcurrentIndexTest.groovy +++ b/java/java-tests/testSrc/com/intellij/index/ConcurrentIndexTest.groovy @@ -22,13 +22,13 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiJavaFile import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.psi.impl.source.PsiFileImpl +import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.BombedProgressIndicator import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.SkipSlowTestLocally import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase import java.util.concurrent.CountDownLatch - /** * @author peter */ @@ -128,4 +128,46 @@ class ConcurrentIndexTest extends JavaCodeInsightFixtureTestCase { for(future in futuresToWait) future.get(); } } + + public void "test forceUpdateAffectsReadOfDataForUnsavedDocuments"() { + def N = Math.max(2, (int)(Runtime.runtime.availableProcessors())); + PsiFileImpl file = (PsiFileImpl) myFixture.addFileToProject("Foo.java", "class Foo {" + ("public void foo() {}\n") * 1000 + "}") + assert myFixture.findClass("Foo").node + + for (i in 1..20) { + println "iteration $i" + WriteCommandAction.runWriteCommandAction(project) { + ((PsiJavaFile) file).importList.add(JavaPsiFacade.getElementFactory(project).createImportStatementOnDemand("foo.bar$i")) + } + PlatformTestUtil.tryGcSoftlyReachableObjects() + assert !file.contentsLoaded + + myFixture.addFileToProject("Foo" + i + ".java", "class Foo" + i + " {" + ("public void foo() {}\n") * 1000 + "}") + + def futuresToWait = [] + def sameStartCondition = new CountDownLatch(N) + + for(j in 1..N/2) { + futuresToWait.add(ApplicationManager.application.executeOnPooledThread { + ApplicationManager.application.runReadAction { + sameStartCondition.countDown() + sameStartCondition.await() + assert myFixture.getJavaFacade().findClass("Foo", GlobalSearchScope.fileScope(file)).node + } + }) + } + + for(j in 1..N/2) { + futuresToWait.add(ApplicationManager.application.executeOnPooledThread { + ApplicationManager.application.runReadAction { + sameStartCondition.countDown() + sameStartCondition.await() + assert myFixture.findClass("Foo" + i).node + } + }); + } + + for(future in futuresToWait) future.get(); + } + } } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java index c29692985d88..9a410b2f615c 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java @@ -190,11 +190,9 @@ public class MemoryIndexStorage implements IndexStorage @Override @NotNull public ValueContainer read(final Key key) throws StorageException { - if (myBufferingEnabled) { - final ValueContainer valueContainer = myMap.get(key); - if (valueContainer != null) { - return valueContainer; - } + final ValueContainer valueContainer = myMap.get(key); + if (valueContainer != null) { + return valueContainer; } return myBackendStorage.read(key);