mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
reparse files on language level change
This commit is contained in:
@@ -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<LanguageLevel
|
||||
|
||||
for (VirtualFile child : fileOrDir.getChildren()) {
|
||||
if (!child.isDirectory() && StdFileTypes.JAVA.equals(child.getFileType())) {
|
||||
FileBasedIndex.getInstance().requestReindex(child);
|
||||
PushedFilePropertiesUpdater.filePropertiesChanged(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,8 +26,6 @@ import com.intellij.psi.impl.JavaPsiFacadeEx;
|
||||
* A TestCase for single PsiFile being opened in Editor conversion. See configureXXX and checkResultXXX method docs.
|
||||
*/
|
||||
public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightTestCase {
|
||||
private LanguageLevel myOldLanguageLevel;
|
||||
|
||||
@SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
|
||||
protected LightCodeInsightTestCase() {
|
||||
IdeaTestCase.initPlatformPrefix();
|
||||
@@ -40,7 +38,6 @@ public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightT
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getProject()).getLanguageLevel();
|
||||
setLanguageLevel(getLanguageLevel());
|
||||
}
|
||||
|
||||
@@ -48,12 +45,6 @@ public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightT
|
||||
return LanguageLevel.HIGHEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
setLanguageLevel(myOldLanguageLevel);
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
protected static void setLanguageLevel(final LanguageLevel level) {
|
||||
LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(level);
|
||||
}
|
||||
|
||||
+35
@@ -31,6 +31,7 @@ import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.DumbModeTask;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
@@ -38,9 +39,15 @@ import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.EmptyRunnable;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.file.impl.FileManagerImpl;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.TransferToEDTQueue;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.messages.MessageBus;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -286,4 +293,32 @@ public class PushedFilePropertiesUpdater {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void filePropertiesChanged(@NotNull final VirtualFile file) {
|
||||
ApplicationManager.getApplication().assertReadAccessAllowed();
|
||||
FileBasedIndex.getInstance().requestReindex(file);
|
||||
for (final Project project : ProjectManager.getInstance().getOpenProjects()) {
|
||||
reloadPsi(file, project);
|
||||
}
|
||||
}
|
||||
|
||||
private static void reloadPsi(final VirtualFile file, final Project project) {
|
||||
final FileManagerImpl fileManager = (FileManagerImpl)((PsiManagerEx)PsiManager.getInstance(project)).getFileManager();
|
||||
if (fileManager.findCachedViewProvider(file) != null) {
|
||||
UIUtil.invokeLaterIfNeeded(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (project.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
fileManager.forceReload(file);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+19
-22
@@ -136,7 +136,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
|
||||
};
|
||||
|
||||
private PsiManagerImpl myPsiManager;
|
||||
private PsiFile myFile;
|
||||
private VirtualFile myFile;
|
||||
private Editor myEditor;
|
||||
private String myTestDataPath;
|
||||
private boolean myEmptyLookup;
|
||||
@@ -380,7 +380,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
|
||||
long elapsed = 0;
|
||||
for (Trinity<PsiFile, Editor, ExpectedHighlightingData> 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<IntentionAction> 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<StructureViewComponent> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LanguageLev
|
||||
|
||||
for (VirtualFile child : fileOrDir.getChildren()) {
|
||||
if (!child.isDirectory() && PythonFileType.INSTANCE.equals(child.getFileType())) {
|
||||
FileBasedIndex.getInstance().requestReindex(child);
|
||||
PushedFilePropertiesUpdater.filePropertiesChanged(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,9 +175,9 @@ public class PyQuickDocTest extends LightMarkedTestCase {
|
||||
}
|
||||
|
||||
public void testPropNewSetter() {
|
||||
PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON26);
|
||||
Map<String, PsiElement> marks = loadTest();
|
||||
PsiElement ref_elt = marks.get("<the_ref>");
|
||||
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<String, PsiElement> marks = loadTest();
|
||||
PsiElement ref_elt = marks.get("<the_ref>");
|
||||
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));
|
||||
|
||||
@@ -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<PyClass> classes = file.getTopLevelClasses();
|
||||
assertEquals(3, classes.size());
|
||||
PyClass pyClass = classes.get(0);
|
||||
|
||||
Reference in New Issue
Block a user