From e2fd9a71df9444b10c623d78a7b80eef4509e349 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 27 Sep 2017 18:11:52 +0300 Subject: [PATCH] Rename: Search text occurrences by declaration FQ name #KT-17949 Fixed #KT-15932 Fixed --- ...inNonCodeSearchElementDescriptionProvider.kt | 4 ++-- .../rename/RenameKotlinClassProcessor.kt | 11 ----------- .../rename/RenameKotlinPsiProcessor.kt | 17 +++++++++++++---- .../rename/funTextOccurrences/after/test.kt | 9 +++++++++ .../rename/funTextOccurrences/after/usage.txt | 2 ++ .../rename/funTextOccurrences/before/test.kt | 9 +++++++++ .../rename/funTextOccurrences/before/usage.txt | 2 ++ .../funTextOccurrences/funTextOccurrences.test | 6 ++++++ .../rename/valTextOccurrences/after/test.kt | 9 +++++++++ .../rename/valTextOccurrences/after/usage.txt | 2 ++ .../rename/valTextOccurrences/before/test.kt | 9 +++++++++ .../rename/valTextOccurrences/before/usage.txt | 2 ++ .../valTextOccurrences/valTextOccurrences.test | 6 ++++++ .../refactoring/rename/RenameTestGenerated.java | 12 ++++++++++++ 14 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 idea/testData/refactoring/rename/funTextOccurrences/after/test.kt create mode 100644 idea/testData/refactoring/rename/funTextOccurrences/after/usage.txt create mode 100644 idea/testData/refactoring/rename/funTextOccurrences/before/test.kt create mode 100644 idea/testData/refactoring/rename/funTextOccurrences/before/usage.txt create mode 100644 idea/testData/refactoring/rename/funTextOccurrences/funTextOccurrences.test create mode 100644 idea/testData/refactoring/rename/valTextOccurrences/after/test.kt create mode 100644 idea/testData/refactoring/rename/valTextOccurrences/after/usage.txt create mode 100644 idea/testData/refactoring/rename/valTextOccurrences/before/test.kt create mode 100644 idea/testData/refactoring/rename/valTextOccurrences/before/usage.txt create mode 100644 idea/testData/refactoring/rename/valTextOccurrences/valTextOccurrences.test diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinNonCodeSearchElementDescriptionProvider.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinNonCodeSearchElementDescriptionProvider.kt index 9af833be0e1..f2b75da1669 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinNonCodeSearchElementDescriptionProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinNonCodeSearchElementDescriptionProvider.kt @@ -21,12 +21,12 @@ import com.intellij.psi.ElementDescriptionProvider import com.intellij.psi.PsiElement import com.intellij.refactoring.util.NonCodeSearchDescriptionLocation import org.jetbrains.kotlin.asJava.namedUnwrappedElement -import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtNamedDeclaration class KotlinNonCodeSearchElementDescriptionProvider : ElementDescriptionProvider { override fun getElementDescription(element: PsiElement, location: ElementDescriptionLocation): String? { if (location !is NonCodeSearchDescriptionLocation) return null - val declaration = element.namedUnwrappedElement as? KtClassOrObject ?: return null + val declaration = element.namedUnwrappedElement as? KtNamedDeclaration ?: return null return if (location.isNonJava) (declaration.fqName?.asString() ?: declaration.name) else declaration.name } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassProcessor.kt index 337e5da3178..7d9a1a3d44b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassProcessor.kt @@ -79,17 +79,6 @@ class RenameKotlinClassProcessor : RenameKotlinPsiProcessor() { } } - override fun getQualifiedNameAfterRename(element: PsiElement, newName: String?, nonJava: Boolean): String? { - if (!nonJava) return newName - - val qualifiedName = when (element) { - is KtClassOrObject -> element.fqName?.asString() ?: element.name - is PsiClass -> element.qualifiedName ?: element.name - else -> return null - } - return PsiUtilCore.getQualifiedNameAfterRename(qualifiedName, newName) - } - override fun findReferences(element: PsiElement): Collection { if (element is KtObjectDeclaration && element.isCompanion()) { return super.findReferences(element).filter { !it.isCompanionObjectClassReference() } 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 2b5c0028067..a9e1dd31c12 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt @@ -17,13 +17,11 @@ package org.jetbrains.kotlin.idea.refactoring.rename import com.intellij.openapi.util.Key -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiImportStaticStatement -import com.intellij.psi.PsiPolyVariantReference -import com.intellij.psi.PsiReference +import com.intellij.psi.* import com.intellij.psi.search.SearchScope import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch +import com.intellij.psi.util.PsiUtilCore import com.intellij.refactoring.listeners.RefactoringElementListener import com.intellij.refactoring.rename.RenamePsiElementProcessor import com.intellij.usageView.UsageInfo @@ -60,6 +58,17 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { return references } + override fun getQualifiedNameAfterRename(element: PsiElement, newName: String?, nonJava: Boolean): String? { + if (!nonJava) return newName + + val qualifiedName = when (element) { + is KtNamedDeclaration -> element.fqName?.asString() ?: element.name + is PsiClass -> element.qualifiedName ?: element.name + else -> return null + } + return PsiUtilCore.getQualifiedNameAfterRename(qualifiedName, newName) + } + override fun prepareRenaming(element: PsiElement, newName: String?, allRenames: MutableMap, scope: SearchScope) { if (newName == null) return diff --git a/idea/testData/refactoring/rename/funTextOccurrences/after/test.kt b/idea/testData/refactoring/rename/funTextOccurrences/after/test.kt new file mode 100644 index 00000000000..ecbe8aedc19 --- /dev/null +++ b/idea/testData/refactoring/rename/funTextOccurrences/after/test.kt @@ -0,0 +1,9 @@ +package test + +class A { + fun baz() {} + + fun bar() { + baz() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/funTextOccurrences/after/usage.txt b/idea/testData/refactoring/rename/funTextOccurrences/after/usage.txt new file mode 100644 index 00000000000..60d3f891318 --- /dev/null +++ b/idea/testData/refactoring/rename/funTextOccurrences/after/usage.txt @@ -0,0 +1,2 @@ +foo +test.A.baz \ No newline at end of file diff --git a/idea/testData/refactoring/rename/funTextOccurrences/before/test.kt b/idea/testData/refactoring/rename/funTextOccurrences/before/test.kt new file mode 100644 index 00000000000..17d5b49ecff --- /dev/null +++ b/idea/testData/refactoring/rename/funTextOccurrences/before/test.kt @@ -0,0 +1,9 @@ +package test + +class A { + fun /*rename*/foo() {} + + fun bar() { + foo() + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/funTextOccurrences/before/usage.txt b/idea/testData/refactoring/rename/funTextOccurrences/before/usage.txt new file mode 100644 index 00000000000..2a1c8a96d45 --- /dev/null +++ b/idea/testData/refactoring/rename/funTextOccurrences/before/usage.txt @@ -0,0 +1,2 @@ +foo +test.A.foo \ No newline at end of file diff --git a/idea/testData/refactoring/rename/funTextOccurrences/funTextOccurrences.test b/idea/testData/refactoring/rename/funTextOccurrences/funTextOccurrences.test new file mode 100644 index 00000000000..1f29c19e6a7 --- /dev/null +++ b/idea/testData/refactoring/rename/funTextOccurrences/funTextOccurrences.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test.kt", + "newName": "baz", + "searchInTextOccurrences": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/valTextOccurrences/after/test.kt b/idea/testData/refactoring/rename/valTextOccurrences/after/test.kt new file mode 100644 index 00000000000..4fa9149ab5f --- /dev/null +++ b/idea/testData/refactoring/rename/valTextOccurrences/after/test.kt @@ -0,0 +1,9 @@ +package test + +class A { + val baz = 1 + + fun bar() { + baz + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/valTextOccurrences/after/usage.txt b/idea/testData/refactoring/rename/valTextOccurrences/after/usage.txt new file mode 100644 index 00000000000..60d3f891318 --- /dev/null +++ b/idea/testData/refactoring/rename/valTextOccurrences/after/usage.txt @@ -0,0 +1,2 @@ +foo +test.A.baz \ No newline at end of file diff --git a/idea/testData/refactoring/rename/valTextOccurrences/before/test.kt b/idea/testData/refactoring/rename/valTextOccurrences/before/test.kt new file mode 100644 index 00000000000..205eeabd8dd --- /dev/null +++ b/idea/testData/refactoring/rename/valTextOccurrences/before/test.kt @@ -0,0 +1,9 @@ +package test + +class A { + val /*rename*/foo = 1 + + fun bar() { + foo + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/valTextOccurrences/before/usage.txt b/idea/testData/refactoring/rename/valTextOccurrences/before/usage.txt new file mode 100644 index 00000000000..2a1c8a96d45 --- /dev/null +++ b/idea/testData/refactoring/rename/valTextOccurrences/before/usage.txt @@ -0,0 +1,2 @@ +foo +test.A.foo \ No newline at end of file diff --git a/idea/testData/refactoring/rename/valTextOccurrences/valTextOccurrences.test b/idea/testData/refactoring/rename/valTextOccurrences/valTextOccurrences.test new file mode 100644 index 00000000000..1f29c19e6a7 --- /dev/null +++ b/idea/testData/refactoring/rename/valTextOccurrences/valTextOccurrences.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test.kt", + "newName": "baz", + "searchInTextOccurrences": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 146a6654ebb..a80d16cb1e8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -198,6 +198,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("funTextOccurrences/funTextOccurrences.test") + public void testFunTextOccurrences_FunTextOccurrences() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/funTextOccurrences/funTextOccurrences.test"); + doTest(fileName); + } + @TestMetadata("funWithLabeledReturns/funWithLabeledReturns.test") public void testFunWithLabeledReturns_FunWithLabeledReturns() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/funWithLabeledReturns/funWithLabeledReturns.test"); @@ -1302,6 +1308,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("valTextOccurrences/valTextOccurrences.test") + public void testValTextOccurrences_ValTextOccurrences() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/valTextOccurrences/valTextOccurrences.test"); + doTest(fileName); + } + @TestMetadata("varInDoWhile/varInDoWhile.test") public void testVarInDoWhile_VarInDoWhile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/varInDoWhile/varInDoWhile.test");