diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java index 6b936572feb9..784d79cb8031 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java @@ -23,7 +23,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; @@ -81,23 +80,17 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase { builders[2].addJdk(IdeaTestUtil.getMockJdk18Path().getPath()); myFixture.setUp(); + + VirtualFile java3Root = myFixture.getTempDirFixture().findOrCreateDir("java3"); + VirtualFile java7Root = myFixture.getTempDirFixture().findOrCreateDir("java7"); + VirtualFile java8Root = myFixture.getTempDirFixture().findOrCreateDir("java8"); + myJava3Module = builders[0].getFixture().getModule(); myJava7Module = builders[1].getFixture().getModule(); myJava8Module = builders[2].getFixture().getModule(); - ModuleRootModificationUtil.updateModel(myJava3Module, model -> { - String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath()) + "/java3"; - model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false); - }); - - ModuleRootModificationUtil.updateModel(myJava7Module, model -> { - String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath()) + "/java7"; - model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false); - }); - - ModuleRootModificationUtil.updateModel(myJava8Module, model -> { - String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath()) + "/java8"; - model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false); - }); + ModuleRootModificationUtil.updateModel(myJava3Module, model -> model.addContentEntry(java3Root).addSourceFolder(java3Root, false)); + ModuleRootModificationUtil.updateModel(myJava7Module, model -> model.addContentEntry(java7Root).addSourceFolder(java7Root, false)); + ModuleRootModificationUtil.updateModel(myJava8Module, model -> model.addContentEntry(java8Root).addSourceFolder(java8Root, false)); } private void addDependencies_37_78() { @@ -234,6 +227,7 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase { PsiClass usage7 = ((PsiJavaFile) myFixture.addFileToProject("java7/a.java", "class A extends java.util.ArrayList {}")).getClasses()[0]; PsiClass usage8 = ((PsiJavaFile) myFixture.addFileToProject("java8/a.java", "class A extends java.util.ArrayList {}")).getClasses()[0]; + PsiUtilCore.ensureValid(usage7); PsiClass abstractList7 = myFixture.getJavaFacade().findClass(AbstractList.class.getName(), usage7.getResolveScope()); PsiClass abstractList8 = myFixture.getJavaFacade().findClass(AbstractList.class.getName(), usage8.getResolveScope()); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/DaemonRespondToChangesTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/DaemonRespondToChangesTest.java index 9ce4dc10208c..9f78b9aa6a85 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/DaemonRespondToChangesTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/DaemonRespondToChangesTest.java @@ -2149,8 +2149,8 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { } public void testModificationInExcludedFileDoesNotCauseRehighlight() { - final PsiFile excluded = configureByText(JavaFileType.INSTANCE, "class EEE { void f(){} }"); - PsiTestUtil.addExcludedRoot(myModule, excluded.getVirtualFile().getParent()); + VirtualFile excluded = configureByText(JavaFileType.INSTANCE, "class EEE { void f(){} }").getVirtualFile(); + PsiTestUtil.addExcludedRoot(myModule, excluded.getParent()); configureByText(JavaFileType.INSTANCE, "class X { }"); List errors = highlightErrors(); @@ -2159,7 +2159,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { TextRange scope = me.getFileDirtyScope(getEditor().getDocument(), Pass.UPDATE_ALL); assertNull(scope); - WriteCommandAction.runWriteCommandAction(getProject(), () -> ((PsiJavaFile)excluded).getClasses()[0].getMethods()[0].delete()); + WriteCommandAction.runWriteCommandAction(getProject(), () -> ((PsiJavaFile)PsiManager.getInstance(myProject).findFile(excluded)).getClasses()[0].getMethods()[0].delete()); UIUtil.dispatchAllInvocationEvents(); scope = me.getFileDirtyScope(getEditor().getDocument(), Pass.UPDATE_ALL); diff --git a/java/java-tests/testSrc/com/intellij/java/psi/resolve/ResolveClassTest.java b/java/java-tests/testSrc/com/intellij/java/psi/resolve/ResolveClassTest.java index 203cd945cc95..c06b923c5c95 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/resolve/ResolveClassTest.java +++ b/java/java-tests/testSrc/com/intellij/java/psi/resolve/ResolveClassTest.java @@ -183,22 +183,26 @@ public class ResolveClassTest extends ResolveTestCase { } public void testModuleSourceAsLibrarySource() throws Exception { - final PsiReference ref = configure(); + VirtualFile dir = createTempVfsDirectory(); + ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.emptyList(), Collections.singletonList(dir.getUrl())); + + final PsiReference ref = configureByFile("class/" + getTestName(false) + ".java", dir); final VirtualFile file = ref.getElement().getContainingFile().getVirtualFile(); assertNotNull(file); createFile(myModule, file.getParent(), "ModuleSourceAsLibrarySourceDep.java", loadFile("class/ModuleSourceAsLibrarySourceDep.java")); - ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.emptyList(), Collections.singletonList(file.getParent().getUrl())); assertInstanceOf(ref.resolve(), PsiClass.class); } public void testModuleSourceAsLibraryClasses() throws Exception { - final PsiReference ref = configure(); + VirtualFile dir = createTempVfsDirectory(); + ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.singletonList(dir.getUrl()), Collections.emptyList()); + + PsiReference ref = configureByFile("class/" + getTestName(false) + ".java", dir); PsiFile psiFile = ref.getElement().getContainingFile(); final VirtualFile file = psiFile.getVirtualFile(); assertNotNull(file); - createFile(myModule, file.getParent(), "ModuleSourceAsLibraryClassesDep.java", loadFile("class/ModuleSourceAsLibraryClassesDep.java")); - ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.singletonList(file.getParent().getUrl()), Collections.emptyList()); + createFile(myModule, dir, "ModuleSourceAsLibraryClassesDep.java", loadFile("class/ModuleSourceAsLibraryClassesDep.java")); //need this to ensure that PsiJavaFileBaseImpl.myResolveCache is filled to reproduce IDEA-91309 DependenciesBuilder.analyzeFileDependencies(psiFile, new DependenciesBuilder.DependencyProcessor() { @Override @@ -231,7 +235,9 @@ public class ResolveClassTest extends ResolveTestCase { public void testStaticImportNetworkPerformance() throws Exception { warmUpResolve(); - PsiReference ref = configure(); + VirtualFile dir = createTempVfsDirectory(); + + PsiReference ref = configureByFile("class/" + getTestName(false) + ".java", dir); int count = 15; String imports = ""; @@ -240,7 +246,7 @@ public class ResolveClassTest extends ResolveTestCase { } for (int i = 0; i < count; i++) { - createFile(myModule, "Foo" + i + ".java", imports + "class Foo" + i + " extends Bar1, Bar2, Bar3 {}"); + createFile(myModule, dir, "Foo" + i + ".java", imports + "class Foo" + i + " extends Bar1, Bar2, Bar3 {}"); } ensureIndexUpToDate(); diff --git a/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java b/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java index 296d1f5afa50..9e4bbe1900a3 100644 --- a/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java @@ -84,11 +84,17 @@ public abstract class PsiTestCase extends ModuleTestCase { @NotNull protected PsiFile createFile(@NotNull Module module, @NotNull String fileName, @NotNull String text) throws Exception { + VirtualFile vDir = createTempVfsDirectory(); + return createFile(module, vDir, fileName, text); + } + + @NotNull + protected VirtualFile createTempVfsDirectory() throws IOException { File dir = createTempDirectory(); VirtualFile vDir = LocalFileSystem.getInstance().refreshAndFindFileByPath(dir.getCanonicalPath().replace(File.separatorChar, '/')); assert vDir != null : dir; - return createFile(module, vDir, fileName, text); + return vDir; } @NotNull diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java index 3e1b2c271210..72ccb8abc76a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java @@ -61,6 +61,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.CommonProcessors; import com.intellij.util.ObjectUtils; import com.intellij.util.Processor; @@ -305,7 +306,7 @@ public class ShowIntentionsPass extends TextEditorHighlightingPass { @NotNull final IntentionsInfo intentions, int passIdToShowIntentionsFor) { final PsiElement psiElement = hostFile.findElementAt(hostEditor.getCaretModel().getOffset()); - LOG.assertTrue(psiElement == null || psiElement.isValid(), psiElement); + if (psiElement != null) PsiUtilCore.ensureValid(psiElement); int offset = hostEditor.getCaretModel().getOffset(); final Project project = hostFile.getProject(); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 112ac8a9ec8d..c89a009960c5 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -1004,16 +1004,15 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } protected PsiFile addFileToProject(@NotNull final String rootPath, @NotNull final String relativePath, @NotNull final String fileText) { - return new WriteCommandAction(getProject()) { + VirtualFile file = new WriteCommandAction(getProject()) { @Override - protected void run(@NotNull Result result) throws Throwable { + protected void run(@NotNull Result result) { try { if (myTempDirFixture instanceof LightTempDirTestFixtureImpl) { - final VirtualFile file = myTempDirFixture.createFile(relativePath, fileText); - result.setResult(PsiManager.getInstance(getProject()).findFile(file)); + result.setResult(myTempDirFixture.createFile(relativePath, fileText)); } else { - result.setResult(((HeavyIdeaTestFixture)myProjectFixture).addFileToProject(rootPath, relativePath, fileText)); + result.setResult(((HeavyIdeaTestFixture)myProjectFixture).addFileToProject(rootPath, relativePath, fileText).getViewProvider().getVirtualFile()); } } catch (IOException e) { @@ -1024,6 +1023,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } } }.execute().getResultObject(); + return ReadAction.compute(() -> PsiManager.getInstance(getProject()).findFile(file)); } public void registerExtension(final ExtensionsArea area, final ExtensionPointName epName, final T extension) { diff --git a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java index 9a3ee78773ac..b945d9411698 100644 --- a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java @@ -480,11 +480,12 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase { myFixture.copyDirectoryToProject("bothForeignAndSourceRootImportResultsReturned", ""); VirtualFile vf = myFixture.findFileInTempDir("ext/m1.py"); - final PsiFile extSource = myFixture.getPsiManager().findFile(vf); - PyImportResolver foreignResolver = (name, context, withRoots) -> name.toString().equals("m1") ? extSource : null; - PlatformTestUtil.registerExtension(PyImportResolver.EP_NAME, foreignResolver, getTestRootDisposable()); withSourceRoots(Lists.newArrayList(myFixture.findFileInTempDir("root")), () -> { + final PsiFile extSource = myFixture.getPsiManager().findFile(vf); + PyImportResolver foreignResolver = (name, context, withRoots) -> name.toString().equals("m1") ? extSource : null; + PlatformTestUtil.registerExtension(PyImportResolver.EP_NAME, foreignResolver, getTestRootDisposable()); + final PsiFile psiFile = myFixture.configureByFile("a.py"); final PsiReference ref = PyResolveTestCase.findReferenceByMarker(psiFile); assertInstanceOf(ref, PsiPolyVariantReference.class); diff --git a/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java index e3aa3a08e564..be0c44ab1194 100644 --- a/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java @@ -68,12 +68,12 @@ public class Py3UnresolvedReferencesInspectionTest extends PyInspectionTestCase protected void doMultiFileTest(@NotNull String filename, @NotNull List sourceRoots) { runWithLanguageLevel(LanguageLevel.PYTHON36, () -> { myFixture.copyDirectoryToProject(getTestDirectoryPath(), ""); - final PsiFile currentFile = myFixture.configureFromTempProjectFile(filename); final Module module = myFixture.getModule(); for (String root : sourceRoots) { PsiTestUtil.addSourceRoot(module, myFixture.findFileInTempDir(root)); } try { + final PsiFile currentFile = myFixture.configureFromTempProjectFile(filename); myFixture.enableInspections(getInspectionClass()); myFixture.checkHighlighting(isWarning(), isInfo(), isWeakWarning()); assertProjectFilesNotParsed(currentFile); diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomManagerImpl.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomManagerImpl.java index 5f634a97f4bc..9e66096935ff 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomManagerImpl.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomManagerImpl.java @@ -284,7 +284,7 @@ public final class DomManagerImpl extends DomManager { public final DomFileElementImpl getFileElement(final XmlFile file, final Class aClass, String rootTagName) { //noinspection unchecked if (file.getUserData(MOCK_DESCRIPTION) == null) { - file.putUserData(MOCK_DESCRIPTION, new MockDomFileDescription<>(aClass, rootTagName, file)); + file.putUserData(MOCK_DESCRIPTION, new MockDomFileDescription<>(aClass, rootTagName, file.getViewProvider().getVirtualFile())); mySemService.clearCache(); } final DomFileElementImpl fileElement = getFileElement(file); diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/MockDomFileDescription.java b/xml/dom-impl/src/com/intellij/util/xml/impl/MockDomFileDescription.java index 3e68ed9232d7..91f3b848996b 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/MockDomFileDescription.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/MockDomFileDescription.java @@ -15,25 +15,27 @@ */ package com.intellij.util.xml.impl; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.xml.XmlFile; import com.intellij.util.xml.DomFileDescription; -import com.intellij.openapi.module.Module; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author peter */ public class MockDomFileDescription extends DomFileDescription { - private final XmlFile myFile; + private final VirtualFile myFile; - public MockDomFileDescription(final Class aClass, final String rootTagName, final XmlFile file) { + public MockDomFileDescription(final Class aClass, final String rootTagName, @Nullable VirtualFile file) { super(aClass, rootTagName); myFile = file; } @Override public boolean isMyFile(@NotNull final XmlFile xmlFile, final Module module) { - return myFile == xmlFile; + return xmlFile.getViewProvider().getVirtualFile().equals(myFile); } @Override diff --git a/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java b/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java index 07b3de6d7670..aa3480c3062c 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java @@ -20,9 +20,12 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiManager; import com.intellij.psi.xml.XmlFile; import com.intellij.util.xml.impl.DomFileElementImpl; import com.intellij.util.xml.impl.MockDomFileDescription; @@ -36,24 +39,24 @@ import java.util.Set; * @author peter */ public class DomFileDescriptionTest extends DomHardCoreTestCase { - private XmlFile myFooElementFile; - private XmlFile myBarElementFile; + private VirtualFile myFooElementFile; + private VirtualFile myBarElementFile; private Disposable myDisposable = Disposer.newDisposable(); @Override protected void setUp() throws Exception { super.setUp(); - myFooElementFile = (XmlFile)createFile("a.xml", ""); + myFooElementFile = createFile("a.xml", "").getVirtualFile(); getDomManager().registerFileDescription(new MockDomFileDescription<>(FooElement.class, "a", myFooElementFile), myDisposable); - myBarElementFile = (XmlFile)createFile("b.xml", ""); + myBarElementFile = createFile("b.xml", "").getVirtualFile(); getDomManager().registerFileDescription(new DomFileDescription(BarElement.class, "b") { @Override public boolean isMyFile(@NotNull final XmlFile file, final Module module) { - String text = myFooElementFile.getText(); + String text = LoadTextUtil.loadText(myFooElementFile).toString(); return text.contains("239"); } @Override @@ -79,8 +82,8 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { } public void testNoInitialDomnessInB() { - assertFalse(getDomManager().isDomFile(myBarElementFile)); - assertNull(getDomManager().getFileElement(myBarElementFile)); + assertFalse(getDomManager().isDomFile(PsiManager.getInstance(myProject).findFile(myBarElementFile))); + assertNull(getDomManager().getFileElement((XmlFile)PsiManager.getInstance(myProject).findFile(myBarElementFile))); } public void testIsDomValue() throws Throwable { @@ -125,7 +128,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public void testCopyFileDescriptionFromOriginalFile() throws Throwable { final XmlFile file = (XmlFile)createFile("a.xml", "42"); - getDomManager().registerFileDescription(new MockDomFileDescription<>(MyElement.class, "b", file), myDisposable); + getDomManager().registerFileDescription(new MockDomFileDescription<>(MyElement.class, "b", file.getVirtualFile()), myDisposable); ApplicationManager.getApplication().runWriteAction(() -> { file.setName("b.xml"); }); @@ -139,9 +142,9 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public void testDependantFileDescriptionCauseStackOverflow() throws Throwable { final XmlFile interestingFile = (XmlFile)createFile("a.xml", "42"); - getDomManager().registerFileDescription(new MockDomFileDescription<>(MyElement.class, "b", (XmlFile)null), myDisposable); + getDomManager().registerFileDescription(new MockDomFileDescription<>(MyElement.class, "b", null), myDisposable); for (int i = 0; i < 239; i++) { - getDomManager().registerFileDescription(new MockDomFileDescription(AbstractElement.class, "b", (XmlFile)null) { + getDomManager().registerFileDescription(new MockDomFileDescription(AbstractElement.class, "b", null) { @Override @NotNull public Set getDependencyItems(final XmlFile file) {