Search statics java declarations through star imports
This commit is contained in:
+45
-16
@@ -272,23 +272,42 @@ class ExpressionsOfTypeProcessor(
|
||||
})
|
||||
}
|
||||
|
||||
private class StaticMemberRequestResultProcessor(val psiMember: PsiMember) : RequestResultProcessor(psiMember) {
|
||||
private class StaticMemberRequestResultProcessor(val psiMember: PsiMember, classes: List<PsiClass>) : RequestResultProcessor(psiMember) {
|
||||
val possibleClassesNames: Set<String> = runReadAction { classes.map { it.qualifiedName }.filterNotNullTo(HashSet()) }
|
||||
|
||||
override fun processTextOccurrence(element: PsiElement, offsetInElement: Int, consumer: Processor<PsiReference>): Boolean {
|
||||
if (element !is KtQualifiedExpression) return true
|
||||
when (element) {
|
||||
is KtQualifiedExpression -> {
|
||||
val selectorExpression = element.selectorExpression ?: return true
|
||||
val selectorReference = element.findReferenceAt(selectorExpression.startOffsetInParent)
|
||||
|
||||
val selectorExpression = element.selectorExpression ?: return true
|
||||
val selectorReference = element.findReferenceAt(selectorExpression.startOffsetInParent)
|
||||
val references = when (selectorReference) {
|
||||
is PsiMultiReference -> selectorReference.references.toList()
|
||||
else -> listOf(selectorReference)
|
||||
}.filterNotNull()
|
||||
|
||||
val references = when (selectorReference) {
|
||||
is PsiMultiReference -> selectorReference.references.toList()
|
||||
else -> listOf(selectorReference)
|
||||
}.filterNotNull()
|
||||
for (ref in references) {
|
||||
ProgressManager.checkCanceled()
|
||||
|
||||
for (ref in references) {
|
||||
ProgressManager.checkCanceled()
|
||||
if (ref.isReferenceTo(psiMember)) {
|
||||
consumer.process(ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ref.isReferenceTo(psiMember)) {
|
||||
consumer.process(ref)
|
||||
is KtImportDirective -> {
|
||||
if (element.isAllUnder) {
|
||||
val fqName = element.importedFqName?.asString()
|
||||
if (fqName != null && fqName in possibleClassesNames) {
|
||||
val ref = element.importedReference
|
||||
?.getQualifiedElementSelector()
|
||||
?.references
|
||||
?.firstOrNull()
|
||||
if (ref != null) {
|
||||
consumer.process(ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,15 +342,25 @@ class ExpressionsOfTypeProcessor(
|
||||
}
|
||||
|
||||
val searchRequestCollector = SearchRequestCollector(SearchSession())
|
||||
val resultProcessor = StaticMemberRequestResultProcessor(member)
|
||||
val resultProcessor = StaticMemberRequestResultProcessor(member, classes)
|
||||
|
||||
for (klass in classes) {
|
||||
val request = klass.name + "." + declarationName
|
||||
|
||||
testLog?.add("Searched references to static member in non-Java files by request $request")
|
||||
|
||||
testLog?.add("Searched references to static ${member.name} in non-Java files by request $request")
|
||||
searchRequestCollector.searchWord(
|
||||
request, classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor)
|
||||
request,
|
||||
classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor)
|
||||
|
||||
val qualifiedName = runReadAction { klass.qualifiedName }
|
||||
if (qualifiedName != null) {
|
||||
val importAllUnderRequest = qualifiedName + ".*"
|
||||
|
||||
testLog?.add("Searched references to static ${member.name} in non-Java files by request $importAllUnderRequest")
|
||||
searchRequestCollector.searchWord(
|
||||
importAllUnderRequest,
|
||||
classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor)
|
||||
}
|
||||
}
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(project).processRequests(searchRequestCollector) { reference ->
|
||||
|
||||
@@ -3,6 +3,7 @@ Resolved INSTANCE()
|
||||
Resolved INSTANCE()
|
||||
Resolved INSTANCE()
|
||||
Resolved OJC()
|
||||
Resolved OJC()
|
||||
Resolved c()
|
||||
Resolved o()
|
||||
Searched references to JavaClassInvoke
|
||||
@@ -11,8 +12,13 @@ Searched references to JavaClassInvoke.Other
|
||||
Searched references to JavaClassInvoke.OtherJavaClass
|
||||
Searched references to parameter c of f(c: JavaClassInvoke) in non-Java files
|
||||
Searched references to parameter o of foo(o: JavaClassInvoke.OtherJavaClass) in non-Java files
|
||||
Searched references to static member in non-Java files by request AnotherOther.INSTANCE
|
||||
Searched references to static member in non-Java files by request JavaClassInvoke.INSTANCE
|
||||
Searched references to static member in non-Java files by request Other.INSTANCE
|
||||
Searched references to static member in non-Java files by request OtherJavaClass.INSTANCE
|
||||
Searched references to static member in non-Java files by request OtherJavaClass.OJC
|
||||
Searched references to static INSTANCE in non-Java files by request AnotherOther.INSTANCE
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassInvoke.*
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassInvoke.AnotherOther.*
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassInvoke.INSTANCE
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassInvoke.Other.*
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassInvoke.OtherJavaClass.*
|
||||
Searched references to static INSTANCE in non-Java files by request Other.INSTANCE
|
||||
Searched references to static INSTANCE in non-Java files by request OtherJavaClass.INSTANCE
|
||||
Searched references to static OJC in non-Java files by request JavaClassInvoke.OtherJavaClass.*
|
||||
Searched references to static OJC in non-Java files by request OtherJavaClass.OJC
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import JavaClassWI.Other.*
|
||||
|
||||
fun bar() {
|
||||
INSTANCE()
|
||||
}
|
||||
+6
-2
@@ -1,6 +1,10 @@
|
||||
Resolved INSTANCE()
|
||||
Resolved INSTANCE()
|
||||
Searched imported static member PsiField:INSTANCE in [JetFile: javaInvokeWithStaticImport.0.kt]
|
||||
Searched imported static member PsiField:INSTANCE in [JetFile: javaInvokeWithStaticImport.1.kt]
|
||||
Searched references to JavaClassWI
|
||||
Searched references to JavaClassWI.Other
|
||||
Searched references to static member in non-Java files by request JavaClassWI.INSTANCE
|
||||
Searched references to static member in non-Java files by request Other.INSTANCE
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassWI.*
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassWI.INSTANCE
|
||||
Searched references to static INSTANCE in non-Java files by request JavaClassWI.Other.*
|
||||
Searched references to static INSTANCE in non-Java files by request Other.INSTANCE
|
||||
+2
-1
@@ -1 +1,2 @@
|
||||
Implicit 'invoke' 4 INSTANCE()
|
||||
[javaInvokeWithStaticImport.0.kt] Implicit 'invoke' 4 INSTANCE()
|
||||
[javaInvokeWithStaticImport.1.kt] Implicit 'invoke' 4 INSTANCE()
|
||||
@@ -10,6 +10,7 @@ Checked type of x2
|
||||
Checked type of x2
|
||||
Checked type of x3
|
||||
Checked type of x3
|
||||
Checked type of x3
|
||||
Checked type of x4
|
||||
Checked type of x5
|
||||
Checked type of y
|
||||
@@ -19,6 +20,7 @@ Checked type of y2
|
||||
Checked type of y2
|
||||
Checked type of y3
|
||||
Checked type of y3
|
||||
Checked type of y3
|
||||
Checked type of y4
|
||||
Checked type of y5
|
||||
Checked type of z
|
||||
@@ -33,6 +35,7 @@ Resolved (x1, y1, z1)
|
||||
Resolved (x2, y2)
|
||||
Resolved (x2, y2, z2)
|
||||
Resolved (x3, y3)
|
||||
Resolved (x3, y3)
|
||||
Resolved (x3, y3, z3)
|
||||
Resolved (x4, y4, z4)
|
||||
Resolved (x5, y5, z5)
|
||||
@@ -50,7 +53,8 @@ Searched references to pack.A
|
||||
Searched references to pack.X
|
||||
Searched references to parameter p1 of test2(p1: JavaClass2, p2: JavaClass3) in non-Java files
|
||||
Searched references to parameter p2 of test2(p1: JavaClass2, p2: JavaClass3) in non-Java files
|
||||
Searched references to static member in non-Java files by request JavaClass4.getNested
|
||||
Searched references to static getNested in non-Java files by request JavaClass4.*
|
||||
Searched references to static getNested in non-Java files by request JavaClass4.getNested
|
||||
Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope:
|
||||
CLASS:A
|
||||
CLASS:X
|
||||
|
||||
Reference in New Issue
Block a user