Find Usages: Classify package usages
#KT-4882 Fixed
This commit is contained in:
@@ -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}.
|
||||
|
||||
@@ -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<JetPackageDirective>()) != null -> JetUsageTypes.PACKAGE_DIRECTIVE
|
||||
simpleName.getParentByType(javaClass<JetQualifiedExpression>()) != 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"))
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiPackage
|
||||
// OPTIONS: usages
|
||||
// FIND_BY_REF
|
||||
package <caret>foo.bar
|
||||
|
||||
import foo.bar.X
|
||||
|
||||
class X
|
||||
|
||||
val x: foo.bar.X? = foo.bar.X()
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user