From ff4c16d3423708b45647ecab29e2dbf9980a4883 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 24 May 2016 19:57:28 +0300 Subject: [PATCH] Rename: Allow renaming class by constructor delegation call referencing primary constructor #KT-8860 Fixed --- ChangeLog.md | 1 + .../rename/RenameOnSecondaryConstructorHandler.kt | 7 ++----- .../after/test.kt | 3 +++ .../before/test.kt | 3 +++ .../renameClassByRefInConstructorDelegationCall.test | 5 +++++ .../idea/refactoring/rename/RenameTestGenerated.java | 6 ++++++ 6 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/after/test.kt create mode 100644 idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/before/test.kt create mode 100644 idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test diff --git a/ChangeLog.md b/ChangeLog.md index 5318b1bce36..89ffc4f5cd2 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -175,6 +175,7 @@ - [`KT-7851`](https://youtrack.jetbrains.com/issue/KT-7851) Respect naming conventions in automatic variable rename ###### Issues fixed +- [`KT-8860`](https://youtrack.jetbrains.com/issue/KT-8860) Allow renaming class by constructor delegation call referencing primary constructor - [`KT-9156`](https://youtrack.jetbrains.com/issue/KT-9156) Quote non-identifier names in Kotlin references - [`KT-9157`](https://youtrack.jetbrains.com/issue/KT-9157) Fixed in-place rename of Kotlin expression referring Java declaration - [`KT-10713`](https://youtrack.jetbrains.com/issue/KT-10713) Skip read-only declarations when renaming parameters diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt index 0070e94fa52..9ccdea1addf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt @@ -25,10 +25,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.rename.RenameHandler import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils -import org.jetbrains.kotlin.psi.KtBlockExpression -import org.jetbrains.kotlin.psi.KtParameterList -import org.jetbrains.kotlin.psi.KtSecondaryConstructor -import org.jetbrains.kotlin.psi.KtValueArgumentList +import org.jetbrains.kotlin.psi.* class RenameOnSecondaryConstructorHandler : RenameHandler { @@ -40,7 +37,7 @@ class RenameOnSecondaryConstructorHandler : RenameHandler { val element = PsiTreeUtil.findElementOfClassAtOffsetWithStopSet( file, editor.caretModel.offset, KtSecondaryConstructor::class.java, false, - KtBlockExpression::class.java, KtValueArgumentList::class.java, KtParameterList::class.java + KtBlockExpression::class.java, KtValueArgumentList::class.java, KtParameterList::class.java, KtConstructorDelegationCall::class.java ) return element != null } diff --git a/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/after/test.kt b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/after/test.kt new file mode 100644 index 00000000000..5167f9a866f --- /dev/null +++ b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/after/test.kt @@ -0,0 +1,3 @@ +class Bar constructor(p: Int) { + constructor(p: Int) : this(p + 1) +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/before/test.kt b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/before/test.kt new file mode 100644 index 00000000000..37513e3449d --- /dev/null +++ b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/before/test.kt @@ -0,0 +1,3 @@ +class Foo constructor(p: Int) { + constructor(p: Int) : /*rename*/this(p + 1) +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test new file mode 100644 index 00000000000..b58d2f13c5c --- /dev/null +++ b/idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test @@ -0,0 +1,5 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test.kt", + "newName": "Bar" +} \ 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 fd8f4290d51..c3a5ad6d8b6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -125,6 +125,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test") + public void testRenameClassByRefInConstructorDelegationCall_RenameClassByRefInConstructorDelegationCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameClassByRefInConstructorDelegationCall/renameClassByRefInConstructorDelegationCall.test"); + doTest(fileName); + } + @TestMetadata("renameClassWithAutoVarConventions/renameClassWithAutoVarConventions.test") public void testRenameClassWithAutoVarConventions_RenameClassWithAutoVarConventions() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameClassWithAutoVarConventions/renameClassWithAutoVarConventions.test");