diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/findUsageUtils.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/findUsageUtils.kt index 903887f089f..53ef08b5c32 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/findUsageUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/findUsageUtils.kt @@ -21,13 +21,18 @@ import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference import com.intellij.psi.impl.light.LightMemberReference +import com.intellij.psi.search.LocalSearchScope +import com.intellij.psi.search.SearchScope +import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.usageView.UsageInfo import com.intellij.usages.UsageViewManager +import com.intellij.util.Query import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightElements import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.psi.KtConstructor import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtPsiUtil import org.jetbrains.kotlin.utils.SmartList fun PsiElement.processAllExactUsages( @@ -74,4 +79,15 @@ fun KtDeclaration.processAllUsages( }, options ) +} + +object ReferencesSearchScopeHelper { + fun search(declaration: KtDeclaration, defaultScope: SearchScope? = null): Query { + val enclosingElement = KtPsiUtil.getEnclosingElementForLocalDeclaration(declaration) + return when { + enclosingElement != null -> ReferencesSearch.search(declaration, LocalSearchScope(enclosingElement)) + defaultScope != null -> ReferencesSearch.search(declaration, defaultScope) + else -> ReferencesSearch.search(declaration) + } + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/DestructureIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/DestructureIntention.kt index 198f96287ab..14635e59c90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/DestructureIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/DestructureIntention.kt @@ -20,7 +20,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference -import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.util.Processor import com.intellij.util.Query import org.jetbrains.kotlin.config.LanguageFeature @@ -32,6 +31,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.core.isVisible +import org.jetbrains.kotlin.idea.findUsages.ReferencesSearchScopeHelper import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.incremental.components.NoLookupLocation @@ -204,7 +204,7 @@ class DestructureIntention : SelfTargetingRangeIntention( Name.identifier(it), NoLookupLocation.FROM_BUILTINS).single()) } - ReferencesSearch.search(declaration).iterateOverMapEntryPropertiesUsages( + ReferencesSearchScopeHelper.search(declaration).iterateOverMapEntryPropertiesUsages( context, { index, usageData -> noBadUsages = usagesToRemove[index].add(usageData, index) && noBadUsages }, { noBadUsages = false } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineCallableProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineCallableProcessor.kt index d34f9302da1..067873337e1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineCallableProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineCallableProcessor.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.refactoring.inline import com.intellij.lang.findUsages.DescriptiveNameUtil import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope -import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.util.CommonRefactoringUtil @@ -28,6 +27,7 @@ import com.intellij.usageView.UsageViewBundle import com.intellij.usageView.UsageViewDescriptor import org.jetbrains.kotlin.idea.codeInliner.UsageReplacementStrategy import org.jetbrains.kotlin.idea.codeInliner.replaceUsages +import org.jetbrains.kotlin.idea.findUsages.ReferencesSearchScopeHelper import org.jetbrains.kotlin.idea.refactoring.pullUp.deleteWithCompanion import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -55,7 +55,7 @@ class KotlinInlineCallableProcessor( if (inlineThisOnly && reference != null) return arrayOf(UsageInfo(reference)) val usages = runReadAction { val searchScope = GlobalSearchScope.projectScope(myProject) - ReferencesSearch.search(declaration, searchScope) + ReferencesSearchScopeHelper.search(declaration, searchScope) } return usages.map(::UsageInfo).toTypedArray() } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt index 9d8775440ab..2307caa7070 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt @@ -23,7 +23,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.openapi.wm.WindowManager import com.intellij.psi.PsiElement -import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.HelpID import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.util.CommonRefactoringUtil @@ -33,15 +32,13 @@ import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInliner.CodeToInline import org.jetbrains.kotlin.idea.codeInliner.PropertyUsageReplacementStrategy +import org.jetbrains.kotlin.idea.findUsages.ReferencesSearchScopeHelper import org.jetbrains.kotlin.idea.project.builtIns import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.references.ReferenceAccess import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtBinaryExpression -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis @@ -118,7 +115,7 @@ class KotlinInlineValHandler(private val withPrompt: Boolean) : InlineActionHand private data class Usages(val referenceExpressions: Collection, val conflicts: MultiMap) private fun findUsages(declaration: KtProperty): Usages { - val references = ReferencesSearch.search(declaration) + val references = ReferencesSearchScopeHelper.search(declaration) val referenceExpressions = mutableListOf() val conflictUsages = MultiMap.create() for (ref in references) {