From 9ebf7cacc69893f64b6572825e07e3c72f379c01 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 30 Apr 2014 09:46:43 +0200 Subject: [PATCH] reparse files on language level change --- .../roots/impl/JavaLanguageLevelPusher.java | 4 +- .../LightCodeInsightTestCase.java | 9 ---- .../impl/PushedFilePropertiesUpdater.java | 35 ++++++++++++++++ .../impl/CodeInsightTestFixtureImpl.java | 41 +++++++++---------- .../psi/impl/PythonLanguageLevelPusher.java | 3 +- .../com/jetbrains/python/PyQuickDocTest.java | 4 +- .../com/jetbrains/python/PyStubsTest.java | 6 +-- 7 files changed, 61 insertions(+), 41 deletions(-) diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/JavaLanguageLevelPusher.java b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaLanguageLevelPusher.java index 7eda8252383c..6daedef21ef9 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/impl/JavaLanguageLevelPusher.java +++ b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaLanguageLevelPusher.java @@ -20,12 +20,10 @@ import com.intellij.openapi.module.LanguageLevelUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.FileAttribute; import com.intellij.pom.java.LanguageLevel; -import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.io.DataInputOutputUtil; import com.intellij.util.messages.MessageBus; import org.jetbrains.annotations.NotNull; @@ -106,7 +104,7 @@ public class JavaLanguageLevelPusher implements FilePropertyPusher trinity : datas) { myEditor = trinity.second; - myFile = trinity.first; + myFile = trinity.first.getVirtualFile(); elapsed += collectAndCheckHighlighting(trinity.third); } return elapsed; @@ -427,7 +427,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override public HighlightTestInfo doTest() { configureByFiles(filePaths); - ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, myFile); + ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, getFile()); if (checkSymbolNames) data.checkSymbolNames(); data.init(); collectAndCheckHighlighting(data); @@ -437,7 +437,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } public void openFileInEditor(@NotNull final VirtualFile file) { - myFile = myPsiManager.findFile(file); + myFile = file; myEditor = createEditor(file); } @@ -680,7 +680,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig assert element != null : "element not found in file " + myFile.getName() + " at caret position, offset " + myEditor.getCaretModel().getOffset() + "\"" + - " psi structure: " + DebugUtil.psiToString(myFile, true, true); + " psi structure: " + DebugUtil.psiToString(getFile(), true, true); return element; } @@ -870,7 +870,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig assert file != null : "Directory " + to + " not found"; assert file.isDirectory() : to + " is not a directory"; final PsiDirectory directory = myPsiManager.findDirectory(file); - new MoveFilesOrDirectoriesProcessor(project, new PsiElement[]{myFile}, directory, + new MoveFilesOrDirectoriesProcessor(project, new PsiElement[]{getFile()}, directory, false, false, null, null).run(); } }.execute().throwException(); @@ -1029,7 +1029,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Nullable protected Editor getCompletionEditor() { - return InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, myFile); + return InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, getFile()); } @Override @@ -1271,7 +1271,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override public PsiFile configureByFile(@NotNull final String file) { configureByFilesInner(file); - return myFile; + return getFile(); } @NotNull @@ -1329,7 +1329,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig configureInner(vFile, SelectionAndCaretMarkupLoader.fromFile(vFile)); } }.execute(); - return myFile; + return getFile(); } @Override @@ -1373,7 +1373,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig catch (IOException e) { throw new RuntimeException(e); } - myFile = myPsiManager.findFile(copy); + myFile = copy; myEditor = createEditor(copy); assert myEditor != null : "Editor couldn't be created for file: " + copy.getPath() + @@ -1394,16 +1394,16 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig }.execute().throwException(); - return myFile; + return getFile(); } protected void prepareVirtualFile(@NotNull VirtualFile file) { } private void setupEditorForInjectedLanguage() { - Editor editor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, myFile); + Editor editor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, getFile()); if (editor instanceof EditorWindow) { - myFile = ((EditorWindow)editor).getInjectedFile(); + myFile = ((EditorWindow)editor).getInjectedFile().getViewProvider().getVirtualFile(); myEditor = editor; } } @@ -1438,7 +1438,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } private PsiFile getHostFile() { - return InjectedLanguageUtil.getTopLevelFile(myFile); + return InjectedLanguageUtil.getTopLevelFile(getFile()); } private long collectAndCheckHighlighting(@NotNull ExpectedHighlightingData data) { @@ -1580,7 +1580,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override public PsiFile getFile() { - return myFile; + return myFile == null ? null : PsiManager.getInstance(getProject()).findFile(myFile); } public static List getAvailableIntentions(@NotNull final Editor editor, @NotNull final PsiFile file) { @@ -1858,13 +1858,10 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig public void testStructureView(@NotNull Consumer consumer) { assert myFile != null : "configure first"; - final VirtualFile vFile = myFile.getVirtualFile(); - assert vFile != null : "no virtual file for " + myFile; + final FileEditor fileEditor = FileEditorManager.getInstance(getProject()).getSelectedEditor(myFile); + assert fileEditor != null : "editor not opened for " + myFile; - final FileEditor fileEditor = FileEditorManager.getInstance(getProject()).getSelectedEditor(vFile); - assert fileEditor != null : "editor not opened for " + vFile; - - final StructureViewBuilder builder = LanguageStructureViewBuilder.INSTANCE.getStructureViewBuilder(myFile); + final StructureViewBuilder builder = LanguageStructureViewBuilder.INSTANCE.getStructureViewBuilder(getFile()); assert builder != null : "no builder for " + myFile; StructureViewComponent component = null; @@ -1891,7 +1888,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); if (myEditor instanceof EditorWindow) { Document document = ((DocumentWindow)myEditor.getDocument()).getDelegate(); - myFile = PsiDocumentManager.getInstance(getProject()).getPsiFile(document); + myFile = FileDocumentManager.getInstance().getFile(document); myEditor = ((EditorWindow)myEditor).getDelegate(); } } diff --git a/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java b/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java index cc906b545f57..67af272bdf1d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java +++ b/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java @@ -33,7 +33,6 @@ import com.intellij.openapi.vfs.newvfs.FileAttribute; import com.intellij.psi.SingleRootFileViewProvider; import com.intellij.util.FileContentUtil; import com.intellij.util.containers.WeakHashMap; -import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.io.DataInputOutputUtil; import com.intellij.util.messages.MessageBus; import com.jetbrains.python.PythonFileType; @@ -152,7 +151,7 @@ public class PythonLanguageLevelPusher implements FilePropertyPusher marks = loadTest(); PsiElement ref_elt = marks.get(""); - PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON26); try { final PyDocStringOwner doc_owner = (PyDocStringOwner)((PyTargetExpression)(ref_elt.getParent())).getReference().resolve(); checkByHTML(myProvider.generateDoc(doc_owner, ref_elt)); @@ -188,9 +188,9 @@ public class PyQuickDocTest extends LightMarkedTestCase { } public void testPropNewDeleter() { + PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON26); Map marks = loadTest(); PsiElement ref_elt = marks.get(""); - PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON26); try { final PyDocStringOwner doc_owner = (PyDocStringOwner)((PyReferenceExpression)(ref_elt.getParent())).getReference().resolve(); checkByHTML(myProvider.generateDoc(doc_owner, ref_elt)); diff --git a/python/testSrc/com/jetbrains/python/PyStubsTest.java b/python/testSrc/com/jetbrains/python/PyStubsTest.java index e04f064752cf..0904b4c3d7d0 100644 --- a/python/testSrc/com/jetbrains/python/PyStubsTest.java +++ b/python/testSrc/com/jetbrains/python/PyStubsTest.java @@ -58,12 +58,12 @@ public class PyStubsTest extends PyTestCase { } public void testStubStructure() { - final PyFile file = getTestFile(); // vfile is problematic, but we need an SDK to check builtins - final Project project = file.getProject(); + final Project project = myFixture.getProject(); + PythonLanguageLevelPusher.setForcedLanguageLevel(project, LanguageLevel.PYTHON26); // we need 2.6+ for @foo.setter try { - PythonLanguageLevelPusher.setForcedLanguageLevel(project, LanguageLevel.PYTHON26); // we need 2.6+ for @foo.setter + final PyFile file = getTestFile(); final List classes = file.getTopLevelClasses(); assertEquals(3, classes.size()); PyClass pyClass = classes.get(0);