diff --git a/ChangeLog.md b/ChangeLog.md index 697a04285f6..6828ee171f0 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -253,6 +253,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-14143`](https://youtrack.jetbrains.com/issue/KT-14143) Create from Usages: Do not suggest on type-mismatched expressions which are not call arguments - [`KT-13882`](https://youtrack.jetbrains.com/issue/KT-13882) Convert Receiver to Parameter: Fix AssertionError - [`KT-14199`](https://youtrack.jetbrains.com/issue/KT-14199) Add Library: Fix exception due to resolution being run in the "dumb mode" +- Convert Receiver to Parameter: Fix this replacement ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertReceiverToParameterIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertReceiverToParameterIntention.kt index 75739588628..4fe269edddd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertReceiverToParameterIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertReceiverToParameterIntention.kt @@ -100,7 +100,13 @@ class ConvertReceiverToParameterIntention : SelfTargetingOffsetIndependentIntent val newName = addedParameter.name revertChanges() if (!brokenOff) { - runChangeSignature(element.project, descriptor, configureChangeSignature(newName), function.receiverTypeReference!!, text) + runChangeSignature( + element.project, + function.resolveToDescriptor() as FunctionDescriptor, + configureChangeSignature(newName), + function.receiverTypeReference!!, + text + ) } } diff --git a/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt b/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt new file mode 100644 index 00000000000..a3faac3ba97 --- /dev/null +++ b/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt @@ -0,0 +1,4 @@ +// WITH_RUNTIME +class A(val s: String) {} + +fun A.extend() = println(this.s) \ No newline at end of file diff --git a/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt.after b/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt.after new file mode 100644 index 00000000000..8a64496c0df --- /dev/null +++ b/idea/testData/intentions/convertReceiverToParameter/replaceThis.kt.after @@ -0,0 +1,4 @@ +// WITH_RUNTIME +class A(val s: String) {} + +fun extend(a: A) = println(a.s) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 310a45a0325..bd83474990a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4756,6 +4756,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("replaceThis.kt") + public void testReplaceThis() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/replaceThis.kt"); + doTest(fileName); + } + @TestMetadata("topLevelFun.kt") public void testTopLevelFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/topLevelFun.kt");