From b35834dd18958f4e8630b9c9bb93b94ace7b18dc Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 19 Apr 2016 20:39:19 +0300 Subject: [PATCH] Rename: Fixed rename of Kotlin enum constants/@JvmField properties through Java references #KT-11817 Fixed --- ChangeLog.md | 1 + .../src/org/jetbrains/kotlin/asJava/KtLightField.kt | 6 ++++-- .../after/EnumJavaRef.java | 5 +++++ .../renameKotlinEnumConstByJavaRef/after/test.kt | 1 + .../before/EnumJavaRef.java | 5 +++++ .../renameKotlinEnumConstByJavaRef/before/test.kt | 1 + .../renameKotlinEnumConstByJavaRef.test | 6 ++++++ .../after/RenameKotlinPropertyWithJvmField.kt | 5 +++++ .../after/testing/JavaClient.java | 10 ++++++++++ .../before/RenameKotlinPropertyWithJvmField.kt | 5 +++++ .../before/testing/JavaClient.java | 10 ++++++++++ .../renameKotlinPropertyWithJvmField.test | 7 +++++++ .../idea/refactoring/rename/RenameTestGenerated.java | 12 ++++++++++++ 13 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/EnumJavaRef.java create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/test.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/EnumJavaRef.java create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/test.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test create mode 100644 idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/RenameKotlinPropertyWithJvmField.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/RenameKotlinPropertyWithJvmField.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test diff --git a/ChangeLog.md b/ChangeLog.md index 50f1e2bc605..967b05d74e3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -33,6 +33,7 @@ Issues fixed: - [KT-11736](https://youtrack.jetbrains.com/issue/KT-11736) Fixed searching of Java usages for @JvmStatic properties and @JvmStatic @JvmOverloads functions - [KT-8817](https://youtrack.jetbrains.com/issue/KT-8817) Fixed rename of Java getters/setters through synthetic property references in Kotlin - [KT-11617](https://youtrack.jetbrains.com/issue/KT-11617) Fixed title of Introduce Parameter declaration chooser +- [KT-11817](https://youtrack.jetbrains.com/issue/KT-11817) Fixed rename of Kotlin enum constants through Java references #### Debugger diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt index 0cc51f5e692..93a3fe4290e 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt @@ -65,8 +65,10 @@ sealed class KtLightFieldImpl( override fun computeConstantValue() = clsDelegate.computeConstantValue() - @Throws(IncorrectOperationException::class) - override fun setName(@NonNls name: String) = throw IncorrectOperationException("Not supported") + override fun setName(@NonNls name: String): PsiElement { + (kotlinOrigin as? KtNamedDeclaration)?.setName(name) + return this + } private val _modifierList by lazy { if (lightMemberOrigin is LightMemberOriginForDeclaration) diff --git a/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/EnumJavaRef.java b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/EnumJavaRef.java new file mode 100644 index 00000000000..881e5d87de5 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/EnumJavaRef.java @@ -0,0 +1,5 @@ +public class EnumJavaRef { + public void use(EnumTarget p) { + System.out.println(p == EnumTarget.YELLOW); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/test.kt b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/test.kt new file mode 100644 index 00000000000..312cb962e79 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/after/test.kt @@ -0,0 +1 @@ +enum class EnumTarget { YELLOW, GREEN, BLUE } \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/EnumJavaRef.java b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/EnumJavaRef.java new file mode 100644 index 00000000000..abe29858f2c --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/EnumJavaRef.java @@ -0,0 +1,5 @@ +public class EnumJavaRef { + public void use(EnumTarget p) { + System.out.println(p == EnumTarget./*rename*/RED); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/test.kt b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/test.kt new file mode 100644 index 00000000000..91e89fe4132 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/before/test.kt @@ -0,0 +1 @@ +enum class EnumTarget { RED, GREEN, BLUE } \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test new file mode 100644 index 00000000000..72dba955a00 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "EnumJavaRef.java", + "newName": "YELLOW", + "byRef": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/RenameKotlinPropertyWithJvmField.kt b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/RenameKotlinPropertyWithJvmField.kt new file mode 100644 index 00000000000..58abb6feeff --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/RenameKotlinPropertyWithJvmField.kt @@ -0,0 +1,5 @@ +package testing.rename + +public open class C { + @JvmStatic var second = 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/testing/JavaClient.java new file mode 100644 index 00000000000..d385ac1ed8a --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/after/testing/JavaClient.java @@ -0,0 +1,10 @@ +package testing; + +import testing.rename.C; + +class JavaClient { + public void foo(C c) { + int n = c.second; + c.second = 2; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/RenameKotlinPropertyWithJvmField.kt b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/RenameKotlinPropertyWithJvmField.kt new file mode 100644 index 00000000000..e9d470fd733 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/RenameKotlinPropertyWithJvmField.kt @@ -0,0 +1,5 @@ +package testing.rename + +public open class C { + @JvmStatic var first = 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/testing/JavaClient.java new file mode 100644 index 00000000000..a86cb87afd3 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/before/testing/JavaClient.java @@ -0,0 +1,10 @@ +package testing; + +import testing.rename.C; + +class JavaClient { + public void foo(C c) { + int n = c.first; + c.first = 2; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test new file mode 100644 index 00000000000..c56a3f50193 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test @@ -0,0 +1,7 @@ +{ + "type": "KOTLIN_PROPERTY", + "classId": "testing/rename/C", + "oldName": "first", + "newName": "second", + "withRuntime": "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 967c1e67e35..f658e0b33ce 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -305,6 +305,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test") + public void testRenameKotlinEnumConstByJavaRef_RenameKotlinEnumConstByJavaRef() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinEnumConstByJavaRef/renameKotlinEnumConstByJavaRef.test"); + doTest(fileName); + } + @TestMetadata("renameKotlinEnumEntry/renameKotlinEnumEntry.test") public void testRenameKotlinEnumEntry_RenameKotlinEnumEntry() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test"); @@ -389,6 +395,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test") + public void testRenameKotlinPropertyWithJvmField_RenameKotlinPropertyWithJvmField() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinPropertyWithJvmField/renameKotlinPropertyWithJvmField.test"); + doTest(fileName); + } + @TestMetadata("renameKotlinStaticMethod/renameKotlinStaticMethod.test") public void testRenameKotlinStaticMethod_RenameKotlinStaticMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinStaticMethod/renameKotlinStaticMethod.test");