diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt index 7c5391a42c2..e376bbdd7ec 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt @@ -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 diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index f7820784273..00f29f0df42 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -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 } diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt index 775a671aaaf..1c8ea18d86f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt @@ -24,11 +24,11 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstr public class KotlinConstructorDelegationCallReferenceSearcher() : QueryExecutorBase(true) { override fun processQuery(queryParameters: SearchParameters, consumer: Processor) { - 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 } } } \ No newline at end of file