From d2b7abe4c76c57d556e647c8d1a467c938f82111 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 19 Nov 2013 16:41:31 +0100 Subject: [PATCH] failing tests on java structure updates without modification count change --- .../psi/PsiModificationTrackerTest.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/java/java-tests/testSrc/com/intellij/psi/PsiModificationTrackerTest.java b/java/java-tests/testSrc/com/intellij/psi/PsiModificationTrackerTest.java index 7cba4a83f4a3..de9aa0981b46 100644 --- a/java/java-tests/testSrc/com/intellij/psi/PsiModificationTrackerTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/PsiModificationTrackerTest.java @@ -2,11 +2,16 @@ package com.intellij.psi; import com.intellij.ide.highlighter.JavaFileType; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.SelectionModel; +import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.impl.PsiManagerEx; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiModificationTracker; import com.intellij.testFramework.IdeaTestCase; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; import com.intellij.util.Processor; import org.jetbrains.annotations.NonNls; @@ -143,4 +148,63 @@ public class PsiModificationTrackerTest extends LightPlatformCodeInsightFixtureT assertEquals(count + 1, modificationTracker.getJavaStructureModificationCount()); } + + public void _testClassShouldNotAppearWithoutEvents() throws IOException { + VirtualFile file = myFixture.getTempDirFixture().createFile("Foo.java", ""); + final Document document = FileDocumentManager.getInstance().getDocument(file); + assertNotNull(document); + new WriteCommandAction.Simple(getProject()) { + @Override + protected void run() throws Throwable { + assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); + long count1 = tracker.getJavaStructureModificationCount(); + + document.insertString(0, "class Foo {}"); + + assertEquals(count1, tracker.getJavaStructureModificationCount()); // no PSI changes yet + //so the class should not exist + assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + + assertFalse(count1 == tracker.getJavaStructureModificationCount()); + assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + } + }.execute(); + } + + public void _testClassShouldNotDisappearWithoutEvents() throws IOException { + new WriteCommandAction.Simple(getProject()) { + @Override + protected void run() throws Throwable { + PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); + long count0 = tracker.getJavaStructureModificationCount(); + + VirtualFile file = myFixture.addFileToProject("Foo.java", "class Foo {}").getVirtualFile(); + final Document document = FileDocumentManager.getInstance().getDocument(file); + assertNotNull(document); + + assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + long count1 = tracker.getJavaStructureModificationCount(); + assertFalse(count1 == count0); + + document.deleteString(0, document.getTextLength()); + + // gc softly-referenced file and AST + PlatformTestUtil.tryGcSoftlyReachableObjects(); + assertNull(((PsiManagerEx)PsiManager.getInstance(getProject())).getFileManager().getCachedPsiFile(file)); + + assertEquals(count1, tracker.getJavaStructureModificationCount()); // no PSI changes yet + //so the class should exist + assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + + assertFalse(count1 == tracker.getJavaStructureModificationCount()); + assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); + } + }.execute(); + } + }