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");