mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
adapt various tests to psi invalidation on root change
This commit is contained in:
+9
-15
@@ -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());
|
||||
|
||||
+3
-3
@@ -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 { <caret> }");
|
||||
List<HighlightInfo> 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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
+5
-5
@@ -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<PsiFile>(getProject()) {
|
||||
VirtualFile file = new WriteCommandAction<VirtualFile>(getProject()) {
|
||||
@Override
|
||||
protected void run(@NotNull Result<PsiFile> result) throws Throwable {
|
||||
protected void run(@NotNull Result<VirtualFile> 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 <T> void registerExtension(final ExtensionsArea area, final ExtensionPointName<T> epName, final T extension) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -68,12 +68,12 @@ public class Py3UnresolvedReferencesInspectionTest extends PyInspectionTestCase
|
||||
protected void doMultiFileTest(@NotNull String filename, @NotNull List<String> 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);
|
||||
|
||||
@@ -284,7 +284,7 @@ public final class DomManagerImpl extends DomManager {
|
||||
public final <T extends DomElement> DomFileElementImpl<T> getFileElement(final XmlFile file, final Class<T> 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<T> fileElement = getFileElement(file);
|
||||
|
||||
@@ -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<T> extends DomFileDescription<T> {
|
||||
private final XmlFile myFile;
|
||||
private final VirtualFile myFile;
|
||||
|
||||
public MockDomFileDescription(final Class<T> aClass, final String rootTagName, final XmlFile file) {
|
||||
public MockDomFileDescription(final Class<T> 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
|
||||
|
||||
@@ -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", "<a/>");
|
||||
myFooElementFile = createFile("a.xml", "<a/>").getVirtualFile();
|
||||
|
||||
getDomManager().registerFileDescription(new MockDomFileDescription<>(FooElement.class, "a", myFooElementFile), myDisposable);
|
||||
|
||||
myBarElementFile = (XmlFile)createFile("b.xml", "<b/>");
|
||||
myBarElementFile = createFile("b.xml", "<b/>").getVirtualFile();
|
||||
|
||||
getDomManager().registerFileDescription(new DomFileDescription<BarElement>(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", "<b>42</b>");
|
||||
|
||||
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", "<b>42</b>");
|
||||
|
||||
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>(AbstractElement.class, "b", (XmlFile)null) {
|
||||
getDomManager().registerFileDescription(new MockDomFileDescription<AbstractElement>(AbstractElement.class, "b", null) {
|
||||
@Override
|
||||
@NotNull
|
||||
public Set getDependencyItems(final XmlFile file) {
|
||||
|
||||
Reference in New Issue
Block a user