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.receiver = Receiver
|
||||||
usageType.selector = Selector
|
usageType.selector = Selector
|
||||||
usageType.delegate = Delegate
|
usageType.delegate = Delegate
|
||||||
|
usageType.packageDirective = Package directive
|
||||||
|
usageType.packageMemberAccess = Package member access
|
||||||
|
|
||||||
x.in.y={0} in {1}
|
x.in.y={0} in {1}
|
||||||
x.implements.y={0} in {1} implements {2} in {3}.
|
x.implements.y={0} in {1} implements {2} in {3}.
|
||||||
|
|||||||
@@ -17,12 +17,9 @@
|
|||||||
package org.jetbrains.jet.plugin.findUsages
|
package org.jetbrains.jet.plugin.findUsages
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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.UsageTarget
|
||||||
import com.intellij.usages.impl.rules.UsageType
|
import com.intellij.usages.impl.rules.UsageType
|
||||||
import com.intellij.usages.impl.rules.UsageTypeProviderEx
|
import com.intellij.usages.impl.rules.UsageTypeProviderEx
|
||||||
import org.jetbrains.annotations.Nullable
|
|
||||||
import org.jetbrains.jet.lang.descriptors.*
|
import org.jetbrains.jet.lang.descriptors.*
|
||||||
import org.jetbrains.jet.lang.psi.*
|
import org.jetbrains.jet.lang.psi.*
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.*
|
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.lexer.JetTokens
|
||||||
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
|
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
|
||||||
import org.jetbrains.jet.plugin.JetBundle
|
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 org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
|
import com.intellij.psi.PsiPackage
|
||||||
|
|
||||||
public object JetUsageTypeProvider : UsageTypeProviderEx {
|
public object JetUsageTypeProvider : UsageTypeProviderEx {
|
||||||
public override fun getUsageType(element: PsiElement?): UsageType? {
|
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()
|
val usageType = getCommonUsageType()
|
||||||
if (usageType != null) return usageType
|
if (usageType != null) return usageType
|
||||||
|
|
||||||
@@ -181,7 +185,9 @@ public object JetUsageTypeProvider : UsageTypeProviderEx {
|
|||||||
} else {
|
} else {
|
||||||
getClassUsageType()
|
getClassUsageType()
|
||||||
}
|
}
|
||||||
is PackageViewDescriptor -> getClassUsageType()
|
is PackageViewDescriptor -> {
|
||||||
|
if (reference.getReference()?.resolve() is PsiPackage) getPackageUsageType() else getClassUsageType()
|
||||||
|
}
|
||||||
is VariableDescriptor -> getVariableUsageType()
|
is VariableDescriptor -> getVariableUsageType()
|
||||||
is FunctionDescriptor -> getFunctionUsageType(descriptor)
|
is FunctionDescriptor -> getFunctionUsageType(descriptor)
|
||||||
else -> null
|
else -> null
|
||||||
@@ -209,6 +215,10 @@ object JetUsageTypes {
|
|||||||
val RECEIVER = UsageType(JetBundle.message("usageType.receiver"))
|
val RECEIVER = UsageType(JetBundle.message("usageType.receiver"))
|
||||||
val DELEGATE = UsageType(JetBundle.message("usageType.delegate"))
|
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
|
// common usage types
|
||||||
val CALLABLE_REFERENCE = UsageType(JetBundle.message("usageType.callable.reference"))
|
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);
|
return new JavaVariableFindUsagesOptions(project);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
JAVA_PACKAGE {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public FindUsagesOptions parse(@NotNull String text, @NotNull Project project) {
|
||||||
|
return new JavaPackageFindUsagesOptions(project);
|
||||||
|
}
|
||||||
|
},
|
||||||
DEFAULT {
|
DEFAULT {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
@@ -247,6 +254,9 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT
|
|||||||
if (klass == PsiField.class) {
|
if (klass == PsiField.class) {
|
||||||
return JAVA_FIELD;
|
return JAVA_FIELD;
|
||||||
}
|
}
|
||||||
|
if (klass == PsiPackage.class) {
|
||||||
|
return JAVA_PACKAGE;
|
||||||
|
}
|
||||||
if (klass == JetTypeParameter.class) {
|
if (klass == JetTypeParameter.class) {
|
||||||
return DEFAULT;
|
return DEFAULT;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,24 +16,21 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.findUsages;
|
package org.jetbrains.jet.findUsages;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.test.InnerTestClasses;
|
import org.jetbrains.jet.test.InnerTestClasses;
|
||||||
import org.jetbrains.jet.test.TestMetadata;
|
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 */
|
/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
@InnerTestClasses({JetFindUsagesTestGenerated.Kotlin.class, JetFindUsagesTestGenerated.Java.class})
|
@InnerTestClasses({JetFindUsagesTestGenerated.Kotlin.class, JetFindUsagesTestGenerated.Java.class})
|
||||||
public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest {
|
public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest {
|
||||||
@TestMetadata("idea/testData/findUsages/kotlin")
|
@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 static class Kotlin extends AbstractJetFindUsagesTest {
|
||||||
public void testAllFilesPresentInKotlin() throws Exception {
|
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);
|
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")
|
@TestMetadata("idea/testData/findUsages/kotlin/findParameterUsages")
|
||||||
public static class FindParameterUsages extends AbstractJetFindUsagesTest {
|
public static class FindParameterUsages extends AbstractJetFindUsagesTest {
|
||||||
public void testAllFilesPresentInFindParameterUsages() throws Exception {
|
public void testAllFilesPresentInFindParameterUsages() throws Exception {
|
||||||
@@ -587,6 +597,7 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest {
|
|||||||
suite.addTestSuite(FindClassUsages.class);
|
suite.addTestSuite(FindClassUsages.class);
|
||||||
suite.addTestSuite(FindFunctionUsages.class);
|
suite.addTestSuite(FindFunctionUsages.class);
|
||||||
suite.addTestSuite(FindObjectUsages.class);
|
suite.addTestSuite(FindObjectUsages.class);
|
||||||
|
suite.addTestSuite(FindPackageUsages.class);
|
||||||
suite.addTestSuite(FindParameterUsages.class);
|
suite.addTestSuite(FindParameterUsages.class);
|
||||||
suite.addTestSuite(FindPropertyUsages.class);
|
suite.addTestSuite(FindPropertyUsages.class);
|
||||||
suite.addTestSuite(FindTypeParameterUsages.class);
|
suite.addTestSuite(FindTypeParameterUsages.class);
|
||||||
|
|||||||
Reference in New Issue
Block a user