From 060a76ea6c17a44cbbf5754d84fef483ab40bde1 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 12 Oct 2018 12:17:49 +0200 Subject: [PATCH] SSR: don't search index for java.lang default package (IDEA-200398) --- .../matcher/compiler/JavaCompilingVisitor.java | 16 +++++++++++++++- .../OptimizedSearchScanTest.java | 16 ++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java index d0c1bcf02625..71e729473d87 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java @@ -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; diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/OptimizedSearchScanTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/OptimizedSearchScanTest.java index aa5e7643569f..3867615bb73c 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/OptimizedSearchScanTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/OptimizedSearchScanTest.java @@ -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); + } }