From bf12908dfcb9743e1378d930bd31d4091a11cadf Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 8 Sep 2016 17:20:19 +0300 Subject: [PATCH] Ignore irrelevant java classes in search results It looks like JavaClassInheritorsSearcher started to give classes based on useScope --- .../testInheritanceFromJavaClass.kt | 5 ++++ .../kotlin/search/AbstractSearcherTest.java | 28 +++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/idea/testData/search/inheritance/testInheritanceFromJavaClass.kt b/idea/testData/search/inheritance/testInheritanceFromJavaClass.kt index f8a93094f30..101bcb397a8 100644 --- a/idea/testData/search/inheritance/testInheritanceFromJavaClass.kt +++ b/idea/testData/search/inheritance/testInheritanceFromJavaClass.kt @@ -2,3 +2,8 @@ class A: Object() {} // CLASS: java.lang.Object // SEARCH: class:A + +// IGNORE_CLASSES: java. +// IGNORE_CLASSES: javax. +// IGNORE_CLASSES: sun. +// IGNORE_CLASSES: org. diff --git a/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java b/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java index aa025dacf04..8b2fcef810f 100644 --- a/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java +++ b/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java @@ -25,6 +25,8 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import com.intellij.util.Query; +import kotlin.collections.CollectionsKt; +import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor; import org.jetbrains.kotlin.idea.test.TestUtilsKt; @@ -58,13 +60,35 @@ public abstract class AbstractSearcherTest extends LightCodeInsightFixtureTestCa } protected void checkResult(Query actual) throws IOException { - List expected = InTextDirectivesUtils.findListWithPrefixes(FileUtil.loadFile(new File(getPathToFile()), true), "// SEARCH: "); + String text = FileUtil.loadFile(new File(getPathToFile()), true); + + List classFqnFilters = InTextDirectivesUtils.findListWithPrefixes(text, "// IGNORE_CLASSES: "); + List actualModified = new ArrayList(); for (Object member : actual) { + if (member instanceof PsiClass) { + final String qualifiedName = ((PsiClass) member).getQualifiedName(); + assert qualifiedName != null; + + boolean filterOut = CollectionsKt.any(classFqnFilters, new Function1() { + @Override + public Boolean invoke(String s) { + return qualifiedName.startsWith(s); + } + }); + + if (filterOut) { + continue; + } + } + actualModified.add(stringRepresentation(member)); } - Collections.sort(expected); Collections.sort(actualModified); + + List expected = InTextDirectivesUtils.findListWithPrefixes(text, "// SEARCH: "); + Collections.sort(expected); + assertOrderedEquals(actualModified, expected); }