From 63d477e3550b5b97ecd7dc13f50a2627b676909e Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 27 Aug 2015 15:41:31 +0200 Subject: [PATCH] fix broken merge; support for renaming primary constructor parameter which declares an overridden property --- .../KotlinReferencesSearcher.kt | 24 +++++++---- .../rename/RenameKotlinPropertyProcessor.kt | 41 ++++++++++--------- ...nPrimaryConstructorPropertyFromOverride.kt | 10 +++++ .../after/testing/JavaClient.java | 9 ++++ .../after/testing/JavaImplementor.java | 14 +++++++ ...nPrimaryConstructorPropertyFromOverride.kt | 10 +++++ .../before/testing/JavaClient.java | 9 ++++ .../before/testing/JavaImplementor.java | 14 +++++++ ...rimaryConstructorPropertyFromOverride.test | 5 +++ .../rename/RenameTestGenerated.java | 6 +++ 10 files changed, 114 insertions(+), 28 deletions(-) create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/RenameKotlinPrimaryConstructorPropertyFromOverride.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaImplementor.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/RenameKotlinPrimaryConstructorPropertyFromOverride.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaImplementor.java create mode 100644 idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test 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 ce9533e5726..3923354508b 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 @@ -151,6 +151,12 @@ public class KotlinReferencesSearcher : QueryExecutorBase processJetClassOrObject(element, queryParameters) @@ -167,17 +173,18 @@ public class KotlinReferencesSearcher : QueryExecutorBase { val propertyMethods = runReadAction { LightClassUtil.getLightClassPropertyMethods(element) } - searchNamedElement(queryParameters, propertyMethods.getGetter()) - searchNamedElement(queryParameters, propertyMethods.getSetter()) + searchNamedElement(queryParameters, propertyMethods.getter) + searchNamedElement(queryParameters, propertyMethods.setter) + searchNamedElement(queryParameters, propertyMethods.backingField) } + is JetParameter -> { - val propertyMethods = runReadAction { LightClassUtil.getLightClassPropertyMethods(element) } - searchNamedElement(queryParameters, propertyMethods.getGetter()) - searchNamedElement(queryParameters, propertyMethods.getSetter()) - searchNamedElement(queryParameters, propertyMethods.getBackingField()) + searchPropertyMethods(queryParameters, element) } + is KotlinLightMethod -> { val declaration = element.getOrigin() if (declaration is JetProperty || (declaration is JetParameter && declaration.hasValOrVar())) { @@ -193,6 +200,7 @@ public class KotlinReferencesSearcher : QueryExecutorBase { val origin = element.getOrigin() ?: return val componentFunctionDescriptor = origin.dataClassComponentFunction() @@ -206,9 +214,7 @@ public class KotlinReferencesSearcher : QueryExecutorBase deepestSuperProperty - Messages.NO -> jetProperty + Messages.YES -> deepestSuperDeclaration + Messages.NO -> callableDeclaration else -> /* Cancel rename */ null } } @@ -177,10 +176,14 @@ public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() { } } - private fun findDeepestOverriddenProperty(jetProperty: JetProperty): JetProperty? { - if (jetProperty.getModifierList()?.hasModifier(JetTokens.OVERRIDE_KEYWORD) == true) { - val bindingContext = jetProperty.analyze() - val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, jetProperty] + private fun findDeepestOverriddenDeclaration(declaration: JetCallableDeclaration): JetCallableDeclaration? { + if (declaration.getModifierList()?.hasModifier(JetTokens.OVERRIDE_KEYWORD) == true) { + val bindingContext = declaration.analyze() + var descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, declaration] + if (descriptor is ValueParameterDescriptor) { + descriptor = bindingContext[BindingContext.VALUE_PARAMETER_AS_PROPERTY, descriptor] + ?: return declaration + } if (descriptor != null) { assert(descriptor is PropertyDescriptor, "Property descriptor is expected") @@ -191,7 +194,7 @@ public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() { val deepest = supers.first() if (deepest != descriptor) { val superPsiElement = DescriptorToSourceUtils.descriptorToDeclaration(deepest) - return superPsiElement as? JetProperty + return superPsiElement as? JetCallableDeclaration } } } diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/RenameKotlinPrimaryConstructorPropertyFromOverride.kt b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/RenameKotlinPrimaryConstructorPropertyFromOverride.kt new file mode 100644 index 00000000000..85a3f232acd --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/RenameKotlinPrimaryConstructorPropertyFromOverride.kt @@ -0,0 +1,10 @@ +package testing.rename + +public open class Foo(public open val second: String) + +public class Bar(public override val /*rename*/second: String) : Foo(second) { +} + +fun usages(f: Foo, b: Bar): String { + return f.second + b.second +} diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaClient.java new file mode 100644 index 00000000000..c49dae2ee8f --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public String foo(Foo f) { + return f.getSecond(); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaImplementor.java b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaImplementor.java new file mode 100644 index 00000000000..24648eab51d --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/after/testing/JavaImplementor.java @@ -0,0 +1,14 @@ +package testng; + +import testing.rename.Foo; + +public class FooImpl extends Foo { + public FooImpl(String first) { + super(first); + } + + @Override + public int getSecond() { + return "abc"; + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/RenameKotlinPrimaryConstructorPropertyFromOverride.kt b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/RenameKotlinPrimaryConstructorPropertyFromOverride.kt new file mode 100644 index 00000000000..5909882e45c --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/RenameKotlinPrimaryConstructorPropertyFromOverride.kt @@ -0,0 +1,10 @@ +package testing.rename + +public open class Foo(public open val first: String) + +public class Bar(public override val /*rename*/first: String) : Foo(first) { +} + +fun usages(f: Foo, b: Bar): String { + return f.first + b.first +} diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaClient.java new file mode 100644 index 00000000000..8966905e9ea --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaClient.java @@ -0,0 +1,9 @@ +package testing; + +import testing.rename.*; + +class JavaClient { + public String foo(Foo f) { + return f.getFirst(); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaImplementor.java b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaImplementor.java new file mode 100644 index 00000000000..1117f7f870e --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/before/testing/JavaImplementor.java @@ -0,0 +1,14 @@ +package testng; + +import testing.rename.Foo; + +public class FooImpl extends Foo { + public FooImpl(String first) { + super(first); + } + + @Override + public int getFirst() { + return "abc"; + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test new file mode 100644 index 00000000000..36df31631ec --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test @@ -0,0 +1,5 @@ +{ + "type": "MARKED_ELEMENT", + "newName": "second", + "mainFile": "RenameKotlinPrimaryConstructorPropertyFromOverride.kt" +} 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 57993448e13..411f305588e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -317,6 +317,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test") + public void testRenameKotlinPrimaryConstructorPropertyFromOverride_RenameKotlinPrimaryConstructorPropertyFromOverride() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinPrimaryConstructorPropertyFromOverride/renameKotlinPrimaryConstructorPropertyFromOverride.test"); + doTest(fileName); + } + @TestMetadata("renameKotlinStaticMethod/renameKotlinStaticMethod.test") public void testRenameKotlinStaticMethod_RenameKotlinStaticMethod() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinStaticMethod/renameKotlinStaticMethod.test");