From 18223dfaaa8ec4d93f482ba12cb8678527bf4ff4 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 24 Aug 2015 17:55:45 +0200 Subject: [PATCH] update backing field references when renaming Kotlin property #KT-7905 Fixed --- .../kotlin/asJava/KotlinLightField.java | 5 +++ .../kotlin/asJava/LightClassUtil.java | 42 ++++++++++++++++++- .../KotlinReferencesSearcher.kt | 1 + .../rename/RenameKotlinPropertyProcessor.kt | 4 +- ...enameKotlinValPropertyInCompanionObject.kt | 7 ++++ .../after/testing/JavaClient.java | 9 ++++ ...enameKotlinValPropertyInCompanionObject.kt | 7 ++++ .../before/testing/JavaClient.java | 9 ++++ ...ameKotlinValPropertyInCompanionObject.test | 6 +++ .../after/RenameKotlinValPropertyInObject.kt | 5 +++ .../after/testing/JavaClient.java | 9 ++++ .../before/RenameKotlinValPropertyInObject.kt | 5 +++ .../before/testing/JavaClient.java | 9 ++++ .../renameKotlinValPropertyInObject.test | 6 +++ .../rename/RenameTestGenerated.java | 12 ++++++ 15 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/RenameKotlinValPropertyInCompanionObject.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/RenameKotlinValPropertyInCompanionObject.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/RenameKotlinValPropertyInObject.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/RenameKotlinValPropertyInObject.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java index 7ad9444b3cd..018306b3c55 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java @@ -182,4 +182,9 @@ public abstract class KotlinLightField { private final PsiMethod getter; private final PsiMethod setter; + private final PsiField backingField; private final Collection accessors = new ArrayList(2); - PropertyAccessorsPsiMethods(@Nullable PsiMethod getter, @Nullable PsiMethod setter) { + PropertyAccessorsPsiMethods(@Nullable PsiMethod getter, @Nullable PsiMethod setter, @Nullable PsiField backingField) { this.getter = getter; if (getter != null) { accessors.add(getter); @@ -353,6 +384,8 @@ public class LightClassUtil { if (setter != null) { accessors.add(setter); } + + this.backingField = backingField; } @Nullable @@ -365,6 +398,11 @@ public class LightClassUtil { return setter; } + @Nullable + public PsiField getBackingField() { + return backingField; + } + @NotNull @Override public Iterator iterator() { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt index 910196b0bae..e2262df8b40 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt @@ -171,6 +171,7 @@ public class KotlinReferencesSearcher : QueryExecutorBase { val declaration = element.getOrigin() diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPropertyProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPropertyProcessor.kt index dbbd26b2b1a..cabdc37297f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPropertyProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPropertyProcessor.kt @@ -44,7 +44,9 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.OverrideResolver public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() { - override fun canProcessElement(element: PsiElement): Boolean = element.namedUnwrappedElement is JetProperty + override fun canProcessElement(element: PsiElement): Boolean { + return element.namedUnwrappedElement is JetProperty + } /* Can't properly update getters and setters in Java */ override fun isInplaceRenameSupported() = false diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/RenameKotlinValPropertyInCompanionObject.kt b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/RenameKotlinValPropertyInCompanionObject.kt new file mode 100644 index 00000000000..bcaa5f5f67c --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/RenameKotlinValPropertyInCompanionObject.kt @@ -0,0 +1,7 @@ +package testing.rename + +class Foo { + companion object { + val SECOND = 111 + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/testing/JavaClient.java new file mode 100644 index 00000000000..28457c12c94 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/after/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public int foo() { + return Foo.SECOND; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/RenameKotlinValPropertyInCompanionObject.kt b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/RenameKotlinValPropertyInCompanionObject.kt new file mode 100644 index 00000000000..6887d3942b3 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/RenameKotlinValPropertyInCompanionObject.kt @@ -0,0 +1,7 @@ +package testing.rename + +class Foo { + companion object { + val FIRST = 111 + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/testing/JavaClient.java new file mode 100644 index 00000000000..1fd7b910a30 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/before/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public int foo() { + return Foo.FIRST; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test new file mode 100644 index 00000000000..d5c02b85fba --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test @@ -0,0 +1,6 @@ +{ + "type": "KOTLIN_PROPERTY", + "classId": "testing/rename/Foo.Companion", + "oldName": "FIRST", + "newName": "SECOND" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/RenameKotlinValPropertyInObject.kt b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/RenameKotlinValPropertyInObject.kt new file mode 100644 index 00000000000..b268804c626 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/RenameKotlinValPropertyInObject.kt @@ -0,0 +1,5 @@ +package testing.rename + +object Foo { + val SECOND = 111 +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/testing/JavaClient.java new file mode 100644 index 00000000000..28457c12c94 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/after/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public int foo() { + return Foo.SECOND; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/RenameKotlinValPropertyInObject.kt b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/RenameKotlinValPropertyInObject.kt new file mode 100644 index 00000000000..7a021031aa1 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/RenameKotlinValPropertyInObject.kt @@ -0,0 +1,5 @@ +package testing.rename + +object Foo { + val FIRST = 111 +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/testing/JavaClient.java new file mode 100644 index 00000000000..1fd7b910a30 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/before/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public int foo() { + return Foo.FIRST; + } +} diff --git a/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test new file mode 100644 index 00000000000..ad1e8caf380 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test @@ -0,0 +1,6 @@ +{ + "type": "KOTLIN_PROPERTY", + "classId": "testing/rename/Foo", + "oldName": "FIRST", + "newName": "SECOND" +} \ 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 af878e54101..484e1a4f9a0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -335,6 +335,18 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test") + public void testRenameKotlinValPropertyInCompanionObject_RenameKotlinValPropertyInCompanionObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinValPropertyInCompanionObject/renameKotlinValPropertyInCompanionObject.test"); + doTest(fileName); + } + + @TestMetadata("renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test") + public void testRenameKotlinValPropertyInObject_RenameKotlinValPropertyInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinValPropertyInObject/renameKotlinValPropertyInObject.test"); + doTest(fileName); + } + @TestMetadata("renameKotlinVarProperty/renameAsJavaGetter.test") public void testRenameKotlinVarProperty_RenameAsJavaGetter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinVarProperty/renameAsJavaGetter.test");