SSR: don't search index for java.lang default package (IDEA-200398)

This commit is contained in:
Bas Leijdekkers
2018-10-12 12:36:16 +02:00
parent 82f213c6ab
commit 060a76ea6c
2 changed files with 27 additions and 5 deletions
@@ -63,10 +63,24 @@ public class JavaCompilingVisitor extends JavaRecursiveElementWalkingVisitor {
@Override
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
if (!handleWord(reference.getReferenceName(), myCompilingVisitor.getContext())) return;
final String word = reference.getReferenceName();
if (!handleWord(word, myCompilingVisitor.getContext())) return;
if (reference.isQualified() && isClassFromJavaLangPackage(reference.resolve())) return;
super.visitReferenceElement(reference);
}
private boolean isClassFromJavaLangPackage(PsiElement target) {
if (!(target instanceof PsiClass)) {
return false;
}
final PsiFile file = target.getContainingFile();
if (!(file instanceof PsiJavaFile)) {
return false;
}
final PsiJavaFile javaFile = (PsiJavaFile)file;
return "java.lang".equals(javaFile.getPackageName());
}
@Override
public void visitMethod(PsiMethod method) {
if (!handleWord(method.getName(), myCompilingVisitor.getContext())) return;
@@ -22,6 +22,11 @@ public class OptimizedSearchScanTest extends StructuralSearchTestCase {
return IdeaTestUtil.getMockJdk17();
}
private String findWordsToBeUsedWhenSearchingFor(final String s) {
findMatchesCount("{}", s);
return PatternCompiler.getLastFindPlan();
}
public void testClassByQName() {
final String plan = findWordsToBeUsedWhenSearchingFor("A.f");
assertEquals("[in code:f][in code:A]", plan);
@@ -95,8 +100,11 @@ public class OptimizedSearchScanTest extends StructuralSearchTestCase {
assertEquals("non-existing class name should be added to plan", "[in code:enum][in code:Zyxwvuts]", plan2);
}
private String findWordsToBeUsedWhenSearchingFor(final String s) {
findMatchesCount("{}", s);
return PatternCompiler.getLastFindPlan();
}
public void testQualifiedReference() {
final String plan = findWordsToBeUsedWhenSearchingFor("new java.lang.RuntimeException('_x)");
assertEquals("[in code:new][in code:RuntimeException]", plan);
final String plan2 = findWordsToBeUsedWhenSearchingFor("new java.lang.reflect.InvocationTargetException('_x)");
assertEquals("[in code:new][in code:InvocationTargetException][in code:reflect][in code:lang][in code:java]", plan2);
}
}