add missing scope checks for highlight usages (EA-75896)
#KT-10038 Fixed
This commit is contained in:
@@ -22,7 +22,10 @@ import com.intellij.psi.PsiMethod
|
|||||||
import com.intellij.psi.PsiReference
|
import com.intellij.psi.PsiReference
|
||||||
import com.intellij.psi.search.SearchScope
|
import com.intellij.psi.search.SearchScope
|
||||||
import com.intellij.psi.util.MethodSignatureUtil
|
import com.intellij.psi.util.MethodSignatureUtil
|
||||||
import org.jetbrains.kotlin.asJava.*
|
import org.jetbrains.kotlin.asJava.KtLightElement
|
||||||
|
import org.jetbrains.kotlin.asJava.KtLightMethod
|
||||||
|
import org.jetbrains.kotlin.asJava.toLightMethods
|
||||||
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
||||||
@@ -30,6 +33,7 @@ import org.jetbrains.kotlin.idea.references.unwrappedTargets
|
|||||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
|
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
|
||||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors
|
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
@@ -112,6 +116,8 @@ public fun PsiElement.processDelegationCallConstructorUsages(scope: SearchScope,
|
|||||||
|
|
||||||
private fun PsiElement.processDelegationCallKotlinConstructorUsages(scope: SearchScope, process: (KtCallElement) -> Boolean): Boolean {
|
private fun PsiElement.processDelegationCallKotlinConstructorUsages(scope: SearchScope, process: (KtCallElement) -> Boolean): Boolean {
|
||||||
val element = unwrapped
|
val element = unwrapped
|
||||||
|
if (element != null && element !in scope) return true
|
||||||
|
|
||||||
val klass = when (element) {
|
val klass = when (element) {
|
||||||
is KtConstructor<*> -> element.getContainingClassOrObject()
|
is KtConstructor<*> -> element.getContainingClassOrObject()
|
||||||
is KtClass -> element
|
is KtClass -> element
|
||||||
|
|||||||
+2
-1
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage
|
|||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages
|
import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.effectiveDeclarations
|
import org.jetbrains.kotlin.psi.psiUtil.effectiveDeclarations
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -103,7 +104,7 @@ public class KotlinFindClassUsagesHandler(
|
|||||||
if (!processMemberReferences(classOrObject, kotlinOptions, referenceProcessor)) return false
|
if (!processMemberReferences(classOrObject, kotlinOptions, referenceProcessor)) return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kotlinOptions.isUsages && classOrObject is KtObjectDeclaration && classOrObject.isCompanion()) {
|
if (kotlinOptions.isUsages && classOrObject is KtObjectDeclaration && classOrObject.isCompanion() && classOrObject in options.searchScope) {
|
||||||
if (!processCompanionObjectInternalReferences(classOrObject, referenceProcessor)) {
|
if (!processCompanionObjectInternalReferences(classOrObject, referenceProcessor)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -24,11 +24,11 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstr
|
|||||||
|
|
||||||
public class KotlinConstructorDelegationCallReferenceSearcher() : QueryExecutorBase<PsiReference, SearchParameters>(true) {
|
public class KotlinConstructorDelegationCallReferenceSearcher() : QueryExecutorBase<PsiReference, SearchParameters>(true) {
|
||||||
override fun processQuery(queryParameters: SearchParameters, consumer: Processor<PsiReference>) {
|
override fun processQuery(queryParameters: SearchParameters, consumer: Processor<PsiReference>) {
|
||||||
val method = queryParameters.getMethod()
|
val method = queryParameters.method
|
||||||
if (!method.isConstructor()) return
|
if (!method.isConstructor) return
|
||||||
|
|
||||||
method.processDelegationCallConstructorUsages(method.getUseScope()) {
|
method.processDelegationCallConstructorUsages(method.useScope.intersectWith(queryParameters.effectiveSearchScope)) {
|
||||||
it.getCalleeExpression()?.getReference()?.let { consumer.process(it) } ?: true
|
it.calleeExpression?.getReference()?.let { consumer.process(it) } ?: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user