javac ast indices: preform reference search inside source code only in tests (should fix tests on JDK 9)

This commit is contained in:
Dmitry Batkovich
2017-07-20 15:29:06 +03:00
parent 5c47576148
commit 8b141ec23a
@@ -28,6 +28,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.injected.MyTestInjector;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.searches.FunctionalExpressionSearch;
import com.intellij.psi.search.searches.MethodReferencesSearch;
import com.intellij.psi.search.searches.ReferencesSearch;
@@ -38,6 +39,7 @@ import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collection;
@SkipSlowTestLocally
public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase {
@@ -79,54 +81,54 @@ public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase {
public void testMethodUsageOnGetter() throws Exception {
configureByFiles(getName(), getName() + "/Foo.java", getName() + "/FooFactory.java", getName() + "/Bar.java");
PsiMethod methodToSearch = findClass("Foo").findMethodsByName("someMethod", false)[0];
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
myCompilerTester.rebuild();
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
}
public void testMethodUsageInClassHierarchy() throws Exception {
configureByFiles(getName(), getName() + "/Bar.java", getName() + "/Foo.java");
PsiMethod methodToSearch = findClass("Foo").findMethodsByName("someMethod", false)[0];
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
myCompilerTester.rebuild();
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
}
public void testMethodUsageInClassHierarchy2() throws Exception {
configureByFiles(getName(), getName() + "/Bar.java", getName() + "/Foo.java");
PsiMethod methodToSearch = myJavaFacade.findClass(CommonClassNames.JAVA_LANG_RUNNABLE).findMethodsByName("run", false)[0];
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
myCompilerTester.rebuild();
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
}
public void testLibMethodUsage() throws Exception {
configureByFile(getName() + "/Foo.java");
myCompilerTester.rebuild();
PsiMethod methodToSearch = myJavaFacade.findClass(CommonClassNames.JAVA_UTIL_COLLECTIONS).findMethodsByName("emptyList", false)[0];
assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll());
assertOneElement(searchMethodReferences(methodToSearch));
}
public void testLibClassUsage() throws Exception {
configureByFile(getName() + "/Foo.java");
myCompilerTester.rebuild();
PsiClass classForSearch = myJavaFacade.findClass("java.lang.System");
assertOneElement(ReferencesSearch.search(classForSearch).findAll());
assertOneElement(searchReferences(classForSearch));
}
public void testLibClassInJavaDocUsage() throws Exception {
configureByFile(getName() + "/Foo.java");
myCompilerTester.rebuild();
PsiClass classForSearch = myJavaFacade.findClass("java.lang.System");
assertOneElement(ReferencesSearch.search(classForSearch).findAll());
assertOneElement(searchReferences(classForSearch));
}
public void testCompileTimeConstFindUsages() throws Exception {
configureByFiles(getName(), getName() + "/Bar.java", getName() + "/Foo.java");
PsiField classForSearch = findClass("Foo").findFieldByName("CONST", false);
PsiElement referenceBefore = assertOneElement(ReferencesSearch.search(classForSearch).findAll()).getElement();
PsiElement referenceBefore = assertOneElement(searchReferences(classForSearch)).getElement();
myCompilerTester.rebuild();
PsiElement referenceAfter = assertOneElement(ReferencesSearch.search(classForSearch).findAll()).getElement();
PsiElement referenceAfter = assertOneElement(searchReferences(classForSearch)).getElement();
assertTrue(referenceBefore == referenceAfter);
}
@@ -135,7 +137,7 @@ public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase {
configureByFile(getName() + "/Foo.java");
myCompilerTester.rebuild();
PsiClass classForSearch = myJavaFacade.findClass("java.lang.System");
PsiReference reference = assertOneElement(ReferencesSearch.search(classForSearch).findAll());
PsiReference reference = assertOneElement(searchReferences(classForSearch));
assertTrue(InjectedLanguageManager.getInstance(getProject()).isInjectedFragment(reference.getElement().getContainingFile()));
}
@@ -163,9 +165,9 @@ public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase {
public void testOverloadedMethods() throws Exception {
configureByFiles(getName(), getName() + "/Foo.java", getName() + "/A.java", getName() + "/B.java");
PsiMethod[] methodsToSearch = findClass("Foo").findMethodsByName("bar", false);
Arrays.stream(methodsToSearch).forEach((m) -> assertSize(2, MethodReferencesSearch.search(m, false).findAll()));
Arrays.stream(methodsToSearch).forEach((m) -> assertSize(2, searchMethodReferences(m)));
myCompilerTester.rebuild();
Arrays.stream(methodsToSearch).forEach((m) -> assertSize(2, MethodReferencesSearch.search(m, false).findAll()));
Arrays.stream(methodsToSearch).forEach((m) -> assertSize(2, searchMethodReferences(m)));
}
private void doTestRunnableFindUsagesWithExcludesConfiguration(@NotNull Consumer<ExcludesConfiguration> excludesConfigurationPatcher,
@@ -182,4 +184,12 @@ public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase {
excludesConfiguration.removeAllExcludeEntryDescriptions();
}
}
private Collection<PsiReference> searchMethodReferences(@NotNull PsiMethod method) {
return MethodReferencesSearch.search(method, GlobalSearchScope.projectScope(getProject()), false).findAll();
}
private Collection<PsiReference> searchReferences(@NotNull PsiElement element) {
return ReferencesSearch.search(element, GlobalSearchScope.projectScope(getProject())).findAll();
}
}