From ddf647ae9664905bb4007f69fc9439d4fa4338e5 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 24 May 2018 11:04:03 +0300 Subject: [PATCH] Remove redundant receiver in "Change function signature" quick fix So #KT-12298 Fixed --- .../idea/quickfix/ChangeMemberFunctionSignatureFix.kt | 4 ++++ .../override/nothingToOverride/removeFunctionReciever.kt | 8 ++++++++ .../nothingToOverride/removeFunctionReciever.kt.after | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 25 insertions(+) create mode 100644 idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt create mode 100644 idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt index b0f0acf2b2b..0fc885f2e51 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtParameterList import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden @@ -330,6 +331,9 @@ class ChangeMemberFunctionSignatureFix private constructor( } val newParameterList = function.valueParameterList!!.replace(patternFunction.valueParameterList!!) as KtParameterList + if (patternFunction.receiverTypeReference == null && function.receiverTypeReference != null) { + function.setReceiverTypeReference(null) + } ShortenReferences.DEFAULT.process(newParameterList) } } diff --git a/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt b/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt new file mode 100644 index 00000000000..4402bcb9791 --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt @@ -0,0 +1,8 @@ +// "Change function signature to 'fun x(s: String)'" "true" +open class A { + open fun x(s: String) {} +} + +class B : A() { + override fun String.x() {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt.after b/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt.after new file mode 100644 index 00000000000..d95415b390b --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt.after @@ -0,0 +1,8 @@ +// "Change function signature to 'fun x(s: String)'" "true" +open class A { + open fun x(s: String) {} +} + +class B : A() { + override fun x(s: String) {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 7fa33de22bd..1c17eab3649 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -8362,6 +8362,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/override/nothingToOverride/overrideJavaMethod.kt"); } + @TestMetadata("removeFunctionReciever.kt") + public void testRemoveFunctionReciever() throws Exception { + runTest("idea/testData/quickfix/override/nothingToOverride/removeFunctionReciever.kt"); + } + @TestMetadata("removeOverride.kt") public void testRemoveOverride() throws Exception { runTest("idea/testData/quickfix/override/nothingToOverride/removeOverride.kt");