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.search.SearchScope
|
||||
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.idea.caches.resolve.analyze
|
||||
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.searchInheritors
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
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 {
|
||||
val element = unwrapped
|
||||
if (element != null && element !in scope) return true
|
||||
|
||||
val klass = when (element) {
|
||||
is KtConstructor<*> -> element.getContainingClassOrObject()
|
||||
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.util.application.runReadAction
|
||||
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.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -103,7 +104,7 @@ public class KotlinFindClassUsagesHandler(
|
||||
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)) {
|
||||
return false
|
||||
}
|
||||
|
||||
+4
-4
@@ -24,11 +24,11 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstr
|
||||
|
||||
public class KotlinConstructorDelegationCallReferenceSearcher() : QueryExecutorBase<PsiReference, SearchParameters>(true) {
|
||||
override fun processQuery(queryParameters: SearchParameters, consumer: Processor<PsiReference>) {
|
||||
val method = queryParameters.getMethod()
|
||||
if (!method.isConstructor()) return
|
||||
val method = queryParameters.method
|
||||
if (!method.isConstructor) return
|
||||
|
||||
method.processDelegationCallConstructorUsages(method.getUseScope()) {
|
||||
it.getCalleeExpression()?.getReference()?.let { consumer.process(it) } ?: true
|
||||
method.processDelegationCallConstructorUsages(method.useScope.intersectWith(queryParameters.effectiveSearchScope)) {
|
||||
it.calleeExpression?.getReference()?.let { consumer.process(it) } ?: true
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user