From f6de6eac0938995b4b9b705a1b3a095363772458 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 17 Aug 2016 14:12:30 +0300 Subject: [PATCH] Rename: Do not search for component convention usages #KT-9381 Fixed --- ChangeLog.md | 1 + .../ideaExtensions/KotlinReferencesSearcher.kt | 11 ++++++----- .../kotlin/idea/search/usagesSearch/searchHelpers.kt | 5 ++++- .../refactoring/rename/RenameKotlinPsiProcessor.kt | 12 ++++++++++-- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 2757990ac0f..9db20430c30 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -275,6 +275,7 @@ Using 'this' as function argument in constructor of non-final class - [`KT-13032`](https://youtrack.jetbrains.com/issue/KT-13032) Rename: Support accessors with non-conventional names - [`KT-13463`](https://youtrack.jetbrains.com/issue/KT-13463) Rename: Quote parameter name when necessary - [`KT-13476`](https://youtrack.jetbrains.com/issue/KT-13476) Rename: Fix parameter rename when new name matches call selector +- [`KT-9381`](https://youtrack.jetbrains.com/issue/KT-9381) Rename: Do not search for component convention usages ##### New features diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt index f8578a36150..697b5f3387a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt @@ -49,7 +49,8 @@ import org.jetbrains.kotlin.psi.psiUtil.parents data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean = false, val acceptOverloads: Boolean = false, val acceptExtensionsOfDeclarationClass: Boolean = false, - val acceptCompanionObjectMembers: Boolean = false) { + val acceptCompanionObjectMembers: Boolean = false, + val searchForComponentConventions: Boolean = true) { fun anyEnabled(): Boolean = acceptCallableOverrides || acceptOverloads || acceptExtensionsOfDeclarationClass companion object { @@ -72,7 +73,10 @@ class KotlinReferencesSearcher : QueryExecutorBase ({true}) } - - val kotlinOptions = (queryParameters as? KotlinReferencesSearchParameters)?.kotlinOptions - ?: KotlinReferencesSearchOptions.Empty val resultProcessor = KotlinRequestResultProcessor(unwrappedElement, filter = refFilter, options = kotlinOptions) if (kotlinOptions.anyEnabled()) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/searchHelpers.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/searchHelpers.kt index dc69c926d5c..505593ced70 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/searchHelpers.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/searchHelpers.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.references.KtDestructuringDeclarationReference +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name @@ -64,11 +65,13 @@ fun PsiNamedElement.getClassNameForCompanionObject(): String? { } } -fun PsiNamedElement.getSpecialNamesToSearch(): Pair, Class<*>?> { +fun PsiNamedElement.getSpecialNamesToSearch(options: KotlinReferencesSearchOptions): Pair, Class<*>?> { val name = name return when { name == null || !Name.isValidIdentifier(name) -> Collections.emptyList() to null this is KtParameter -> { + if (!options.searchForComponentConventions) return Collections.emptyList() to null + val componentFunctionName = this.dataClassComponentFunction()?.name if (componentFunctionName == null) return Collections.emptyList() to null diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt index 11a43de30a0..aef558557a4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt @@ -23,24 +23,32 @@ import com.intellij.psi.PsiPolyVariantReference import com.intellij.psi.PsiReference import com.intellij.psi.search.SearchScope import com.intellij.psi.search.searches.MethodReferencesSearch +import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.listeners.RefactoringElementListener import com.intellij.refactoring.rename.RenamePsiElementProcessor import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.quoteIfNeeded +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters +import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.resolve.ImportPath -import org.jetbrains.kotlin.utils.SmartList abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { override fun canProcessElement(element: PsiElement): Boolean = element is KtNamedDeclaration override fun findReferences(element: PsiElement): Collection { - val references = SmartList(super.findReferences(element)) + val searchParameters = KotlinReferencesSearchParameters( + element, + element.project.projectScope(), + kotlinOptions = KotlinReferencesSearchOptions(searchForComponentConventions = false) + ) + val references = ReferencesSearch.search(searchParameters).toMutableList() if (element is KtNamedFunction || (element is KtProperty && !element.isLocal) || (element is KtParameter && element.hasValOrVar())) {