From 93e906ef5f970f0f612bd33356de86244ccfe2c9 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 23 Oct 2013 16:06:38 +0400 Subject: [PATCH] Filter usages in import directives --- .../KotlinFindClassUsagesHandler.java | 15 ++++----- .../kotlinClassAllUsagesNoImport.0.kt | 9 ++++++ .../kotlinClassAllUsagesNoImport.1.kt | 10 ++++++ .../kotlinClassAllUsagesNoImport.results.txt | 2 ++ .../kotlinTopLevelMethodUsagesNoImport.0.kt | 6 ++++ .../kotlinTopLevelMethodUsagesNoImport.1.kt | 12 +++++++ ...inTopLevelMethodUsagesNoImport.results.txt | 2 ++ .../findUsages/AbstractJetFindUsagesTest.java | 31 +++++++++++++------ .../jet/findUsages/JetFindUsagesTest.java | 10 ++++++ 9 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.0.kt create mode 100644 idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.1.kt create mode 100644 idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.results.txt create mode 100644 idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.0.kt create mode 100644 idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.1.kt create mode 100644 idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.results.txt diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java index 833313b2d49..df6affe1fef 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java @@ -24,8 +24,9 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadActionProcessor; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.*; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.PsiElementProcessorAdapter; import com.intellij.psi.search.searches.ClassInheritorsSearch; @@ -35,7 +36,10 @@ import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.asJava.LightClassUtil; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetClass; +import org.jetbrains.jet.lang.psi.JetDeclaration; +import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.plugin.findUsages.FindUsagesUtils; import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; import org.jetbrains.jet.plugin.findUsages.dialogs.KotlinFindClassUsagesDialog; @@ -80,10 +84,7 @@ public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandlerServer { + open fun work() { + println("Server") + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.1.kt b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.1.kt new file mode 100644 index 00000000000..4e084621fcd --- /dev/null +++ b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.1.kt @@ -0,0 +1,10 @@ +package client + +import server.Server + +class Client(): Server() { + override fun work() { + super.work() + println("Client") + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.results.txt b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.results.txt new file mode 100644 index 00000000000..bbb8d55d8b8 --- /dev/null +++ b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.results.txt @@ -0,0 +1,2 @@ +Super type qualifier (7: 15) super.work() +Supertype (5: 17) class Client(): Server() { diff --git a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.0.kt b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.0.kt new file mode 100644 index 00000000000..1f38ca91dbe --- /dev/null +++ b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.0.kt @@ -0,0 +1,6 @@ +// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetNamedFunction +// OPTIONS: usages, skipImports +package server; + +fun processRequest() = "foo" + diff --git a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.1.kt b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.1.kt new file mode 100644 index 00000000000..9bd981a0c77 --- /dev/null +++ b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.1.kt @@ -0,0 +1,12 @@ +package client + +import server.processRequest + +class Client { + val methodRef = ::processRequest() + + fun doProcessRequest() { + println("Process...") + processRequest() + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.results.txt b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.results.txt new file mode 100644 index 00000000000..f5e49f9db0a --- /dev/null +++ b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.results.txt @@ -0,0 +1,2 @@ +Callable reference (6: 23) val methodRef = ::processRequest() +Function call (10: 9) processRequest() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java b/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java index 68b862f7ec3..9c53b7d135c 100644 --- a/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java +++ b/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.Ordering; import com.intellij.find.FindManager; import com.intellij.find.findUsages.FindUsagesHandler; import com.intellij.find.findUsages.FindUsagesOptions; +import com.intellij.find.findUsages.JavaFindUsagesOptions; import com.intellij.find.impl.FindManagerImpl; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; @@ -68,10 +69,9 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT options.isUsages = false; options.searchConstructorUsages = false; for (String s : InTextDirectivesUtils.findListWithPrefixes(text, "// OPTIONS: ")) { - if (s.equals("usages")) { - options.isUsages = true; - } - else if (s.equals("constructorUsages")) { + if (parseCommonOptions(options, s)) continue; + + if (s.equals("constructorUsages")) { options.searchConstructorUsages = true; } else if (s.equals("derivedInterfaces")) { @@ -99,10 +99,9 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT KotlinMethodFindUsagesOptions options = new KotlinMethodFindUsagesOptions(project); options.isUsages = false; for (String s : InTextDirectivesUtils.findListWithPrefixes(text, "// OPTIONS: ")) { - if (s.equals("usages")) { - options.isUsages = true; - } - else if (s.equals("overrides")) { + if (parseCommonOptions(options, s)) continue; + + if (s.equals("overrides")) { options.isOverridingMethods = true; options.isImplementingMethods = true; } @@ -117,6 +116,20 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT } }; + protected static boolean parseCommonOptions(JavaFindUsagesOptions options, String s) { + if (s.equals("usages")) { + options.isUsages = true; + return true; + } + + if (s.equals("skipImports")) { + options.isSkipImportStatements = true; + return true; + } + + return false; + } + @NotNull public abstract FindUsagesOptions parse(@NotNull String text, @NotNull Project project); @@ -172,7 +185,7 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT File[] extraFiles = rootDir.listFiles( new FilenameFilter() { @Override - public boolean accept(File dir, String name) { + public boolean accept(@NotNull File dir, @NotNull String name) { if (!name.startsWith(prefix) || name.equals(mainFileName)) return false; String ext = name.substring(name.lastIndexOf('.') + 1); diff --git a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java index 73ba8844c08..3f5aed3d73d 100644 --- a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java +++ b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java @@ -113,6 +113,11 @@ public class JetFindUsagesTest extends AbstractJetFindUsagesTest { doTest("idea/testData/findUsages/findClassUsages/kotlinClassAllUsages3.0.kt"); } + @TestMetadata("kotlinClassAllUsagesNoImport.0.kt") + public void testKotlinClassAllUsagesNoImport() throws Exception { + doTest("idea/testData/findUsages/findClassUsages/kotlinClassAllUsagesNoImport.0.kt"); + } + @TestMetadata("kotlinClassConstructorUsages.0.kt") public void testKotlinClassConstructorUsages() throws Exception { doTest("idea/testData/findUsages/findClassUsages/kotlinClassConstructorUsages.0.kt"); @@ -226,6 +231,11 @@ public class JetFindUsagesTest extends AbstractJetFindUsagesTest { doTest("idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.0.kt"); } + @TestMetadata("kotlinTopLevelMethodUsagesNoImport.0.kt") + public void testKotlinTopLevelMethodUsagesNoImport() throws Exception { + doTest("idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsagesNoImport.0.kt"); + } + } @TestMetadata("idea/testData/findUsages/findObjectUsages")