From 1452ffec6de44a69d7cb0dc60225e84b2df298e8 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 24 Jun 2014 16:08:29 +0400 Subject: [PATCH] Find Usages: Classify package usages #KT-4882 Fixed --- .../jetbrains/jet/plugin/JetBundle.properties | 2 ++ .../plugin/findUsages/JetUsageTypeProvider.kt | 22 +++++++++++++----- .../kotlinPackageUsages.0.kt | 10 ++++++++ .../kotlinPackageUsages.results.txt | 4 ++++ .../findUsages/AbstractJetFindUsagesTest.java | 10 ++++++++ .../JetFindUsagesTestGenerated.java | 23 ++++++++++++++----- 6 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.0.kt create mode 100644 idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.results.txt diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 3b96bdecdcc..62aa43d0f39 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -366,6 +366,8 @@ usageType.super.type.qualifier = Super type qualifier usageType.receiver = Receiver usageType.selector = Selector usageType.delegate = Delegate +usageType.packageDirective = Package directive +usageType.packageMemberAccess = Package member access x.in.y={0} in {1} x.implements.y={0} in {1} implements {2} in {3}. diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt index b68e64047d0..6596b198c92 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt @@ -17,12 +17,9 @@ package org.jetbrains.jet.plugin.findUsages import com.intellij.psi.PsiElement -import com.intellij.psi.tree.IElementType -import com.intellij.psi.util.PsiTreeUtil import com.intellij.usages.UsageTarget import com.intellij.usages.impl.rules.UsageType import com.intellij.usages.impl.rules.UsageTypeProviderEx -import org.jetbrains.annotations.Nullable import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.psi.psiUtil.* @@ -30,9 +27,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.plugin.JetBundle -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragment import org.jetbrains.jet.lang.resolve.DescriptorUtils +import com.intellij.psi.PsiPackage public object JetUsageTypeProvider : UsageTypeProviderEx { public override fun getUsageType(element: PsiElement?): UsageType? { @@ -166,6 +162,14 @@ public object JetUsageTypeProvider : UsageTypeProviderEx { } } + fun getPackageUsageType(): UsageType? { + return when { + simpleName.getParentByType(javaClass()) != null -> JetUsageTypes.PACKAGE_DIRECTIVE + simpleName.getParentByType(javaClass()) != null -> JetUsageTypes.PACKAGE_MEMBER_ACCESS + else -> getClassUsageType() + } + } + val usageType = getCommonUsageType() if (usageType != null) return usageType @@ -181,7 +185,9 @@ public object JetUsageTypeProvider : UsageTypeProviderEx { } else { getClassUsageType() } - is PackageViewDescriptor -> getClassUsageType() + is PackageViewDescriptor -> { + if (reference.getReference()?.resolve() is PsiPackage) getPackageUsageType() else getClassUsageType() + } is VariableDescriptor -> getVariableUsageType() is FunctionDescriptor -> getFunctionUsageType(descriptor) else -> null @@ -209,6 +215,10 @@ object JetUsageTypes { val RECEIVER = UsageType(JetBundle.message("usageType.receiver")) val DELEGATE = UsageType(JetBundle.message("usageType.delegate")) + // packages + val PACKAGE_DIRECTIVE = UsageType(JetBundle.message("usageType.packageDirective")) + val PACKAGE_MEMBER_ACCESS = UsageType(JetBundle.message("usageType.packageMemberAccess")) + // common usage types val CALLABLE_REFERENCE = UsageType(JetBundle.message("usageType.callable.reference")) } \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.0.kt b/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.0.kt new file mode 100644 index 00000000000..59004567e9e --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.0.kt @@ -0,0 +1,10 @@ +// PSI_ELEMENT: com.intellij.psi.PsiPackage +// OPTIONS: usages +// FIND_BY_REF +package foo.bar + +import foo.bar.X + +class X + +val x: foo.bar.X? = foo.bar.X() \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.results.txt b/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.results.txt new file mode 100644 index 00000000000..94176e58b23 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.results.txt @@ -0,0 +1,4 @@ +Class/object property type (10: 8) val x: foo.bar.X? = foo.bar.X() +Package directive (4: 9) package foo.bar +Package member access (10: 21) val x: foo.bar.X? = foo.bar.X() +Usage in import (6: 8) import foo.bar.X diff --git a/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java b/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java index 0a63fc33543..3b8ec3722fb 100644 --- a/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java +++ b/idea/tests/org/jetbrains/jet/findUsages/AbstractJetFindUsagesTest.java @@ -202,6 +202,13 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT return new JavaVariableFindUsagesOptions(project); } }, + JAVA_PACKAGE { + @NotNull + @Override + public FindUsagesOptions parse(@NotNull String text, @NotNull Project project) { + return new JavaPackageFindUsagesOptions(project); + } + }, DEFAULT { @NotNull @Override @@ -247,6 +254,9 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT if (klass == PsiField.class) { return JAVA_FIELD; } + if (klass == PsiPackage.class) { + return JAVA_PACKAGE; + } if (klass == JetTypeParameter.class) { return DEFAULT; } diff --git a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java index a6613f63e57..345e7fb76ae 100644 --- a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java @@ -16,24 +16,21 @@ package org.jetbrains.jet.findUsages; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; -import java.util.regex.Pattern; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.findUsages.AbstractJetFindUsagesTest; +import java.io.File; +import java.util.regex.Pattern; /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @InnerTestClasses({JetFindUsagesTestGenerated.Kotlin.class, JetFindUsagesTestGenerated.Java.class}) public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { @TestMetadata("idea/testData/findUsages/kotlin") - @InnerTestClasses({Kotlin.FindClassUsages.class, Kotlin.FindFunctionUsages.class, Kotlin.FindObjectUsages.class, Kotlin.FindParameterUsages.class, Kotlin.FindPropertyUsages.class, Kotlin.FindTypeParameterUsages.class, Kotlin.FindWithFilteringImports.class, Kotlin.FindWithStructuralGrouping.class, Kotlin.UnresolvedAnnotation.class}) + @InnerTestClasses({Kotlin.FindClassUsages.class, Kotlin.FindFunctionUsages.class, Kotlin.FindObjectUsages.class, Kotlin.FindPackageUsages.class, Kotlin.FindParameterUsages.class, Kotlin.FindPropertyUsages.class, Kotlin.FindTypeParameterUsages.class, Kotlin.FindWithFilteringImports.class, Kotlin.FindWithStructuralGrouping.class, Kotlin.UnresolvedAnnotation.class}) public static class Kotlin extends AbstractJetFindUsagesTest { public void testAllFilesPresentInKotlin() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/findUsages/kotlin"), Pattern.compile("^(.+)\\.0\\.kt$"), true); @@ -388,6 +385,19 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { } + @TestMetadata("idea/testData/findUsages/kotlin/findPackageUsages") + public static class FindPackageUsages extends AbstractJetFindUsagesTest { + public void testAllFilesPresentInFindPackageUsages() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/findUsages/kotlin/findPackageUsages"), Pattern.compile("^(.+)\\.0\\.kt$"), true); + } + + @TestMetadata("kotlinPackageUsages.0.kt") + public void testKotlinPackageUsages() throws Exception { + doTest("idea/testData/findUsages/kotlin/findPackageUsages/kotlinPackageUsages.0.kt"); + } + + } + @TestMetadata("idea/testData/findUsages/kotlin/findParameterUsages") public static class FindParameterUsages extends AbstractJetFindUsagesTest { public void testAllFilesPresentInFindParameterUsages() throws Exception { @@ -587,6 +597,7 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { suite.addTestSuite(FindClassUsages.class); suite.addTestSuite(FindFunctionUsages.class); suite.addTestSuite(FindObjectUsages.class); + suite.addTestSuite(FindPackageUsages.class); suite.addTestSuite(FindParameterUsages.class); suite.addTestSuite(FindPropertyUsages.class); suite.addTestSuite(FindTypeParameterUsages.class);