From 4e3c1e9f561efbd4f26627fcde0f396c15197ea1 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 17 Apr 2018 20:21:28 +0300 Subject: [PATCH] Rename: Do not search text occurrences of local declarations #KT-23838 Fixed --- .../idea/refactoring/rename/RenameKotlinPsiProcessor.kt | 6 ++++++ .../idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 | 6 ++++++ .../refactoring/rename/inplace/NoTextUsagesForLocalVar.kt | 6 ++++++ .../rename/inplace/NoTextUsagesForLocalVar.kt.after | 6 ++++++ .../jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt | 4 ++++ 5 files changed, 28 insertions(+) create mode 100644 idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt create mode 100644 idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt.after 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 1d5ee60760e..1d7cd9d489d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt @@ -59,6 +59,12 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { return references } + override fun getElementToSearchInStringsAndComments(element: PsiElement): PsiElement? { + val unwrapped = element?.unwrapped ?: return null + if ((unwrapped is KtDeclaration) && KtPsiUtil.isLocal(unwrapped as KtDeclaration)) return null + return element + } + override fun getQualifiedNameAfterRename(element: PsiElement, newName: String, nonJava: Boolean): String? { if (!nonJava) return newName diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 index b0875034e34..6762cb24c90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 @@ -59,6 +59,12 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { return references } + override fun getElementToSearchInStringsAndComments(element: PsiElement?): PsiElement? { + val unwrapped = element?.unwrapped ?: return null + if ((unwrapped is KtDeclaration) && KtPsiUtil.isLocal(unwrapped as KtDeclaration)) return null + return element + } + override fun getQualifiedNameAfterRename(element: PsiElement, newName: String?, nonJava: Boolean): String? { if (!nonJava) return newName diff --git a/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt b/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt new file mode 100644 index 00000000000..86da3f6b630 --- /dev/null +++ b/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt @@ -0,0 +1,6 @@ +fun foo(x: Int) { + val y = x + 1 + val z = y + 1 + // y + val s = "y" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt.after b/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt.after new file mode 100644 index 00000000000..bcf70775d56 --- /dev/null +++ b/idea/testData/refactoring/rename/inplace/NoTextUsagesForLocalVar.kt.after @@ -0,0 +1,6 @@ +fun foo(x: Int) { + val w = x + 1 + val z = w + 1 + // y + val s = "y" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt index 6f446b69947..1889d56fdd3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt @@ -174,6 +174,10 @@ class InplaceRenameTest : LightPlatformCodeInsightTestCase() { doTestMemberInplaceRename("`object`") } + fun testNoTextUsagesForLocalVar() { + doTestMemberInplaceRename("w") + } + private fun doTestImplicitLambdaParameter(newName: String) { configureByFile(getTestName(false) + ".kt")