diff --git a/plugins/kotlin/code-insight/intentions-k2/resources/kotlin.code-insight.intentions.k2.xml b/plugins/kotlin/code-insight/intentions-k2/resources/kotlin.code-insight.intentions.k2.xml
index 4e5c49c66718..24e97b2cf647 100644
--- a/plugins/kotlin/code-insight/intentions-k2/resources/kotlin.code-insight.intentions.k2.xml
+++ b/plugins/kotlin/code-insight/intentions-k2/resources/kotlin.code-insight.intentions.k2.xml
@@ -275,6 +275,13 @@
group.names.kotlin
+
+ kotlin
+ org.jetbrains.kotlin.idea.k2.codeinsight.intentions.ConvertParameterToReceiverIntention
+ messages.KotlinBundle
+ group.names.kotlin
+
+
kotlin
org.jetbrains.kotlin.idea.k2.codeinsight.intentions.IfToWhenIntention
diff --git a/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/intentions/ConvertParameterToReceiverIntention.kt b/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/intentions/ConvertParameterToReceiverIntention.kt
new file mode 100644
index 000000000000..be4519edc064
--- /dev/null
+++ b/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/intentions/ConvertParameterToReceiverIntention.kt
@@ -0,0 +1,80 @@
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.k2.codeinsight.intentions
+
+import com.intellij.openapi.actionSystem.ActionPlaces
+import com.intellij.openapi.actionSystem.impl.Utils.computeWithProgressIcon
+import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.application.ReadAction
+import com.intellij.openapi.application.readAction
+import com.intellij.openapi.editor.Editor
+import com.intellij.psi.PsiMethod
+import com.intellij.refactoring.RefactoringBundle
+import com.intellij.ui.awt.RelativePoint
+import org.jetbrains.kotlin.analysis.api.analyze
+import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
+import org.jetbrains.kotlin.idea.codeinsight.api.classic.intentions.SelfTargetingIntention
+import org.jetbrains.kotlin.idea.codeinsight.utils.findExistingEditor
+import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesSupport
+import org.jetbrains.kotlin.idea.k2.refactoring.changeSignature.KotlinChangeInfo
+import org.jetbrains.kotlin.idea.k2.refactoring.changeSignature.KotlinChangeSignatureProcessor
+import org.jetbrains.kotlin.idea.k2.refactoring.changeSignature.KotlinMethodDescriptor
+import org.jetbrains.kotlin.idea.k2.refactoring.checkSuperMethods
+import org.jetbrains.kotlin.lexer.KtTokens.OVERRIDE_KEYWORD
+import org.jetbrains.kotlin.psi.KtNamedFunction
+import org.jetbrains.kotlin.psi.KtParameter
+import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
+
+internal class ConvertParameterToReceiverIntention : SelfTargetingIntention(
+KtParameter::class.java,
+KotlinBundle.lazyMessage("convert.parameter.to.receiver")
+) {
+
+ override fun startInWriteAction(): Boolean = false
+
+ override fun isApplicableTo(element: KtParameter, caretOffset: Int): Boolean {
+ val nameIdentifier = element.nameIdentifier ?: return false
+ if (!nameIdentifier.textRange.contains(caretOffset)) return false
+
+ if (element.isVarArg) return false
+
+ val namedFunction = element.ownerFunction as? KtNamedFunction ?: return false
+ if (namedFunction.receiverTypeReference != null) return false
+ if (namedFunction.hasModifier(OVERRIDE_KEYWORD)) {
+ val overridesJava = {
+ analyze(namedFunction) {
+ namedFunction.symbol.allOverriddenSymbols.any { it.psi is PsiMethod }
+ }
+ }
+
+ val hasJavaOverride = if (ApplicationManager.getApplication().isDispatchThread()) {
+ val editor = element.findExistingEditor()!!
+ val aComponent = editor.contentComponent
+ val point = RelativePoint(aComponent, editor.logicalPositionToXY(editor.offsetToLogicalPosition(caretOffset)))
+ computeWithProgressIcon(point, aComponent, ActionPlaces.UNKNOWN) {
+ readAction { overridesJava() }
+ }
+ }
+ else {
+ overridesJava()
+ }
+
+ if (hasJavaOverride) return false
+ }
+ return true
+ }
+
+ override fun applyTo(element: KtParameter, editor: Editor?) {
+ val function = element.getStrictParentOfType() ?: return
+ val parameterIndex = function.valueParameters.indexOf(element)
+
+ val superMethods = checkSuperMethods(function, emptyList(), RefactoringBundle.message("to.refactor"))
+ val superFunction = superMethods.firstOrNull() as? KtNamedFunction ?: return
+
+ val methodDescriptor = KotlinMethodDescriptor(superFunction)
+
+ val changeInfo = KotlinChangeInfo(methodDescriptor)
+ changeInfo.receiverParameterInfo = changeInfo.newParameters[parameterIndex]
+
+ KotlinChangeSignatureProcessor(element.project, changeInfo).run()
+ }
+}
\ No newline at end of file
diff --git a/plugins/kotlin/code-insight/intentions-k2/tests/test/org/jetbrains/kotlin/idea/k2/intentions/tests/K2IntentionTestGenerated.java b/plugins/kotlin/code-insight/intentions-k2/tests/test/org/jetbrains/kotlin/idea/k2/intentions/tests/K2IntentionTestGenerated.java
index a72fc7d01654..6b6998e538bb 100644
--- a/plugins/kotlin/code-insight/intentions-k2/tests/test/org/jetbrains/kotlin/idea/k2/intentions/tests/K2IntentionTestGenerated.java
+++ b/plugins/kotlin/code-insight/intentions-k2/tests/test/org/jetbrains/kotlin/idea/k2/intentions/tests/K2IntentionTestGenerated.java
@@ -8052,7 +8052,129 @@ public abstract class K2IntentionTestGenerated extends AbstractK2IntentionTest {
+ @RunWith(JUnit3RunnerWithInners.class)
+ @TestMetadata("../../../idea/tests/testData/intentions/convertParameterToReceiver")
+ public static class ConvertParameterToReceiver extends AbstractK2IntentionTest {
+ @java.lang.Override
+ @org.jetbrains.annotations.NotNull
+ public final KotlinPluginMode getPluginMode() {
+ return KotlinPluginMode.K2;
+ }
+ private void runTest(String testDataFilePath) throws Exception {
+ KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
+ }
+
+ @TestMetadata("classParameter.kt")
+ public void testClassParameter() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/classParameter.kt");
+ }
+
+ @TestMetadata("companionAsReceiver.kt")
+ public void testCompanionAsReceiver() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/companionAsReceiver.kt");
+ }
+
+ @TestMetadata("definitelyNotNullType.kt")
+ public void testDefinitelyNotNullType() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/definitelyNotNullType.kt");
+ }
+
+ @TestMetadata("explicitThis.kt")
+ public void testExplicitThis() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/explicitThis.kt");
+ }
+
+ @TestMetadata("explicitThisForAnonymousObject.kt")
+ public void testExplicitThisForAnonymousObject() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/explicitThisForAnonymousObject.kt");
+ }
+
+ @TestMetadata("explicitThisForExtension.kt")
+ public void testExplicitThisForExtension() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/explicitThisForExtension.kt");
+ }
+
+ @TestMetadata("explicitThisForExtension2.kt")
+ public void testExplicitThisForExtension2() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/explicitThisForExtension2.kt");
+ }
+
+ @TestMetadata("functionExpression.kt")
+ public void testFunctionExpression() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/functionExpression.kt");
+ }
+
+ @TestMetadata("functionExpressionWithThisConflict.kt")
+ public void testFunctionExpressionWithThisConflict() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt");
+ }
+
+ @TestMetadata("hasVararg.kt")
+ public void testHasVararg() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/hasVararg.kt");
+ }
+
+ @TestMetadata("javaBaseMethod.kt")
+ public void testJavaBaseMethod() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/javaBaseMethod.kt");
+ }
+
+ @TestMetadata("kotlinBaseMethod.kt")
+ public void testKotlinBaseMethod() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/kotlinBaseMethod.kt");
+ }
+
+ @TestMetadata("lambdaParameter.kt")
+ public void testLambdaParameter() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/lambdaParameter.kt");
+ }
+
+ @TestMetadata("localFun.kt")
+ public void testLocalFun() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/localFun.kt");
+ }
+
+ @TestMetadata("localObject.kt")
+ public void testLocalObject() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/localObject.kt");
+ }
+
+ @TestMetadata("localObjectWithFunctionNameConflict.kt")
+ public void testLocalObjectWithFunctionNameConflict() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/localObjectWithFunctionNameConflict.kt");
+ }
+
+ @TestMetadata("memberFun.kt")
+ public void testMemberFun() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/memberFun.kt");
+ }
+
+ @TestMetadata("noParameterUnderCaret.kt")
+ public void testNoParameterUnderCaret() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/noParameterUnderCaret.kt");
+ }
+
+ @TestMetadata("parameterOfObjectFunction.kt")
+ public void testParameterOfObjectFunction() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt");
+ }
+
+ @TestMetadata("topLevelFun.kt")
+ public void testTopLevelFun() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/topLevelFun.kt");
+ }
+
+ @TestMetadata("vararg.kt")
+ public void testVararg() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/vararg.kt");
+ }
+
+ @TestMetadata("withExtensionReceiver.kt")
+ public void testWithExtensionReceiver() throws Exception {
+ runTest("../../../idea/tests/testData/intentions/convertParameterToReceiver/withExtensionReceiver.kt");
+ }
+ }
diff --git a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/.k2Intention b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/.k2Intention
new file mode 100644
index 000000000000..3b2e9683417f
--- /dev/null
+++ b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/.k2Intention
@@ -0,0 +1 @@
+org.jetbrains.kotlin.idea.k2.codeinsight.intentions.ConvertParameterToReceiverIntention
diff --git a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt
index 64ab49984d21..a2e4fef1277c 100644
--- a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt
+++ b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt
@@ -1,4 +1,5 @@
// SHOULD_FAIL_WITH: Parameter reference can't be safely replaced with this since target function can't be referenced in this context
+// IGNORE_K2
interface T {
val foo: Int
}
diff --git a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/localObjectWithFunctionNameConflict.kt b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/localObjectWithFunctionNameConflict.kt
index b9c613c361b9..9e97f936d4cc 100644
--- a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/localObjectWithFunctionNameConflict.kt
+++ b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/localObjectWithFunctionNameConflict.kt
@@ -1,4 +1,5 @@
// SHOULD_FAIL_WITH: Parameter reference can't be safely replaced with this@foo since @foo is ambiguous in this context
+// IGNORE_K2
fun foo(bar: Int) {
object {
fun foo() {
diff --git a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt
index 91ec423d10e8..5bae445ef08d 100644
--- a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt
+++ b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt
@@ -1,4 +1,5 @@
// WITH_STDLIB
+// IGNORE_K2
object Foo {
fun bar(p: String){}
}
diff --git a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt.after b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt.after
index 73ec4d66406a..e69da70337f9 100644
--- a/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt.after
+++ b/plugins/kotlin/idea/tests/testData/intentions/convertParameterToReceiver/parameterOfObjectFunction.kt.after
@@ -1,6 +1,7 @@
import Foo.bar
// WITH_STDLIB
+// IGNORE_K2
object Foo {
fun String.bar() {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt
index 5989b81f3692..edce719ed456 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt
@@ -1,3 +1,2 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual fun f1(i: Int, s: String) {}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt.after
index 58ad986ccc24..a0144c910f14 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/actual/jvm/Some.kt.after
@@ -1,3 +1,2 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual fun String.f1(i: Int) {}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt
index 4939db48a917..c64a64ffc392 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt
@@ -1,3 +1,2 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect fun f1(i: Int, s: String)
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt.after
index d58905c661d2..de1f452584ae 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/expect/common/Some.kt.after
@@ -1,3 +1,2 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect fun String.f1(i: Int)
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt
index b1c3c620d9a3..39a9908d8d33 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun c(a: Int, b: String) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt.after
index 11be9bca9615..7ecfb5b1a32d 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override/jvm/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun String.c(a: Int) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt
index ff5666df09b2..dd14cda9223e 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun c(a: Int, b: String) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt.after
index 6f0242f9954a..7c15ed819cdc 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override2/jvm/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun String.c(a: Int) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt
index c5d7d1c198ca..1b18e61506a5 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect class A {
fun c(a: Int, b: String)
}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt.after
index a113790082dc..fb1804a6cabf 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override3/common/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect class A {
fun String.c(a: Int)
}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt
index 78587b46f6ed..d46aa54a0182 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect open class A() {
open fun c(a: Int, b: String)
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt.after
index 05a22b0e2cb2..674179b81cfa 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override4/common/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect open class A() {
open fun String.c(a: Int)
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt
index f1a7adeb9917..b71edc391703 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect open class A() {
open fun c(a: Int, b: String)
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt.after
index 9499ad8fd429..c683bb25548a 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override5/common/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect open class A() {
open fun String.c(a: Int)
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt
index b7f717857ce4..dbef60e6f987 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun c(a: Int, b: String) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt.after
index 2270f13de945..4db18395bdb2 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/changeSignature/override6/jvm/Some.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual open class A {
actual open fun String.c(a: Int) {}
}
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt
index eef4f9112986..f44767d5ebb6 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect class Foo {
fun foo(n: Int, s: String)
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt.after
index 9cdcadc6969d..01e7e3534dc1 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByHeader/header/header.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
expect class Foo {
fun String.foo(n: Int)
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt
index a7b5ec4c7664..67f33a786e79 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual class Foo {
actual fun foo(n: Int, s: String) {
diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt.after
index ddfb921bea74..e92224ca30ca 100644
--- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt.after
+++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/memberFunParameterToReceiverByImpl/js/js.kt.after
@@ -1,5 +1,4 @@
// "Convert parameter to receiver" "true"
-// IGNORE_K2
actual class Foo {
actual fun String.foo(n: Int) {
diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/inlineVariableOrProperty/accessToPropertyOfClassViaReceiver.kt.k2.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/inlineVariableOrProperty/accessToPropertyOfClassViaReceiver.kt.k2.after
index 79993148efe0..5f1070f7dce7 100644
--- a/plugins/kotlin/idea/tests/testData/refactoring/inline/inlineVariableOrProperty/accessToPropertyOfClassViaReceiver.kt.k2.after
+++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/inlineVariableOrProperty/accessToPropertyOfClassViaReceiver.kt.k2.after
@@ -6,7 +6,7 @@ fun Foo.m() {
object : Runnable {
override fun run() {
if ((1..2).find {
- println(this@m.i)
+ println(this@Foo.i)
true
} != 0) {
}
diff --git a/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry.kt.after
index c01c32533324..a82387dc9dce 100644
--- a/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry.kt.after
+++ b/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry.kt.after
@@ -3,7 +3,7 @@
enum class MyEnum {
m;
companion object { val m = 1 }
- fun context() = println(m.hashCode() + Companion.m)
+ fun context() = println(m.hashCode() + MyEnum.Companion.m)
}
fun external() = println(MyEnum.m.hashCode() + MyEnum.Companion.m)
// IGNORE_K1
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry1.kt.k2.after b/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry1.kt.k2.after
new file mode 100644
index 000000000000..51b24e30f4d4
--- /dev/null
+++ b/plugins/kotlin/idea/tests/testData/refactoring/rename/inplace/HidingCompanionPropertyByEnumEntry1.kt.k2.after
@@ -0,0 +1,8 @@
+// NEW_NAME: e
+// RENAME: member
+enum class MyEnum {
+ e;
+ companion object { val e = 1 }
+ fun context() = println(e.hashCode() + MyEnum.Companion.e)
+}
+fun external() = println(MyEnum.e.hashCode() + MyEnum.Companion.e)
\ No newline at end of file
diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/KotlinChangeSignatureUsageSearcher.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/KotlinChangeSignatureUsageSearcher.kt
index 6234b9b87c73..fe6edf322b7a 100644
--- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/KotlinChangeSignatureUsageSearcher.kt
+++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/KotlinChangeSignatureUsageSearcher.kt
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KaValueParameterSymbol
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.base.util.useScope
import org.jetbrains.kotlin.idea.k2.refactoring.changeSignature.usages.*
+import org.jetbrains.kotlin.idea.k2.refactoring.getThisQualifier
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.kdoc.psi.impl.KDocName
import org.jetbrains.kotlin.psi.*
@@ -116,8 +117,8 @@ internal object KotlinChangeSignatureUsageSearcher {
if (name != null) {
if (receiverExpression is KtThisExpression) {
result.add(KotlinNonQualifiedOuterThisUsage(receiverExpression, name))
- } else if (receiverValue is KaImplicitReceiverValue && partiallyAppliedSymbol.extensionReceiver == null) {
- result.add(KotlinImplicitThisUsage(receiverExpression, name))
+ } else if (receiverValue is KaImplicitReceiverValue && partiallyAppliedSymbol.extensionReceiver == null && receiverExpression is KtNameReferenceExpression) {
+ result.add(KotlinImplicitThisUsage(receiverExpression, getThisQualifier(receiverValue)))
}
}
}
diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/usages/KotlinParameterUsage.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/usages/KotlinParameterUsage.kt
index af8821b555fd..9b48d2296943 100644
--- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/usages/KotlinParameterUsage.kt
+++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/changeSignature/usages/KotlinParameterUsage.kt
@@ -69,19 +69,15 @@ internal class KotlinImplicitThisToParameterUsage(
internal class KotlinImplicitThisUsage(
callElement: KtElement,
- private val targetDescriptor: Name
+ private val newReceiver: String
) : UsageInfo(callElement), KotlinBaseChangeSignatureUsage {
- private fun getNewReceiverText() = when {
- targetDescriptor.isSpecial -> "this"
- else -> "this@${targetDescriptor.asString()}"
- }
override fun processUsage(
changeInfo: KotlinChangeInfoBase,
element: KtElement,
allUsages: Array
): KtElement {
- val newQualifiedCall = KtPsiFactory(element.project).createExpression("${getNewReceiverText()}.${element.text}"
+ val newQualifiedCall = KtPsiFactory(element.project).createExpression("$newReceiver.${element.text}"
) as KtQualifiedExpression
return element.replace(newQualifiedCall).parent as KtElement
}
diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/copy/CopyKotlinDeclarationsHandler.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/copy/CopyKotlinDeclarationsHandler.kt
index a871a5c23c64..1ae4970deea0 100644
--- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/copy/CopyKotlinDeclarationsHandler.kt
+++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/copy/CopyKotlinDeclarationsHandler.kt
@@ -3,6 +3,8 @@
package org.jetbrains.kotlin.idea.k2.refactoring.copy
import com.intellij.ide.util.EditorHelper
+import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.application.ex.ApplicationManagerEx
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.Messages
@@ -171,8 +173,10 @@ class CopyKotlinDeclarationsHandler : AbstractCopyKotlinDeclarationsHandler() {
project.checkConflictsInteractively(conflicts) {
try {
- project.executeCommand(copyCommandName) {
- doRefactor(sourceData, targetData)
+ ApplicationManagerEx.getApplicationEx().runWriteActionWithCancellableProgressInDispatchThread(copyCommandName, project, null) {
+ project.executeCommand(copyCommandName) {
+ doRefactor(sourceData, targetData)
+ }
}
} finally {
elements.filterIsInstance().forEach(::unMarkAllUsages)
diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePreprocessorUtil.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePreprocessorUtil.kt
index 891229e9484a..706886513cdb 100644
--- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePreprocessorUtil.kt
+++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePreprocessorUtil.kt
@@ -3,22 +3,22 @@ package org.jetbrains.kotlin.idea.k2.refactoring.inline.codeInliner
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
-import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.analyze
-import org.jetbrains.kotlin.analysis.api.resolution.KaImplicitReceiverValue
-import org.jetbrains.kotlin.analysis.api.resolution.singleFunctionCallOrNull
-import org.jetbrains.kotlin.analysis.api.resolution.singleVariableAccessCall
-import org.jetbrains.kotlin.analysis.api.resolution.symbol
import org.jetbrains.kotlin.analysis.api.permissions.KaAllowAnalysisFromWriteAction
import org.jetbrains.kotlin.analysis.api.permissions.KaAllowAnalysisOnEdt
import org.jetbrains.kotlin.analysis.api.permissions.allowAnalysisFromWriteAction
import org.jetbrains.kotlin.analysis.api.permissions.allowAnalysisOnEdt
+import org.jetbrains.kotlin.analysis.api.resolution.KaImplicitReceiverValue
+import org.jetbrains.kotlin.analysis.api.resolution.singleFunctionCallOrNull
+import org.jetbrains.kotlin.analysis.api.resolution.singleVariableAccessCall
+import org.jetbrains.kotlin.analysis.api.resolution.symbol
import org.jetbrains.kotlin.analysis.api.symbols.*
-import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KaDeclarationContainerSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KaSymbolWithMembers
import org.jetbrains.kotlin.analysis.api.types.KaFunctionType
import org.jetbrains.kotlin.idea.codeinsight.utils.addTypeArguments
import org.jetbrains.kotlin.idea.codeinsight.utils.getRenderedTypeArguments
+import org.jetbrains.kotlin.idea.k2.refactoring.getThisQualifier
import org.jetbrains.kotlin.idea.k2.refactoring.util.ConvertReferenceToLambdaUtil
import org.jetbrains.kotlin.idea.refactoring.inline.codeInliner.CodeToInline
import org.jetbrains.kotlin.idea.refactoring.inline.codeInliner.MutableCodeToInline
@@ -209,9 +209,9 @@ internal fun encodeInternalReferences(codeToInline: MutableCodeToInline, origina
analyze(t) {
val resolvedSymbol = t.symbol
val containingSymbol = resolvedSymbol.containingSymbol ?: return true
- if (containingSymbol is KaSymbolWithMembers) {
+ if (containingSymbol is KaDeclarationContainerSymbol) {
val staticScope = containingSymbol.staticMemberScope
- return resolvedSymbol in staticScope.getAllSymbols()
+ return resolvedSymbol in staticScope.declarations
}
return false
}
@@ -306,15 +306,4 @@ internal fun specifyNullTypeExplicitly(codeToInline: MutableCodeToInline, origin
codeToInline.replaceExpression(it, KtPsiFactory.contextual(it).createExpression(nullCast))
}
}
-}
-
-context(KaSession)
-internal fun getThisQualifier(receiverValue: KaImplicitReceiverValue): String {
- val symbol = receiverValue.symbol
- return if ((symbol as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) {
- (symbol.containingSymbol as KaClassifierSymbol).name!!.asString() + "." + symbol.name!!.asString()
- }
- else {
- "this" + ((((symbol as? KaReceiverParameterSymbol)?.owningCallableSymbol ?: symbol) as? KaNamedSymbol)?.name?.let { "@$it" } ?: "")
- }
}
\ No newline at end of file
diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/utils.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/utils.kt
index f1eddee02fa6..cc1f2c255439 100644
--- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/utils.kt
+++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/utils.kt
@@ -9,13 +9,21 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.util.parentOfType
import com.intellij.refactoring.util.RefactoringDescriptionLocation
import org.jetbrains.annotations.Nls
+import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.resolution.KaErrorCallInfo
+import org.jetbrains.kotlin.analysis.api.resolution.KaImplicitReceiverValue
import org.jetbrains.kotlin.analysis.api.resolution.KaSimpleFunctionCall
import org.jetbrains.kotlin.analysis.api.resolution.successfulFunctionCallOrNull
import org.jetbrains.kotlin.analysis.api.resolution.successfulVariableAccessCall
import org.jetbrains.kotlin.analysis.api.resolution.symbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaAnonymousObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaClassKind
+import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaClassifierSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaReceiverParameterSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol
import org.jetbrains.kotlin.analysis.api.types.KaType
import org.jetbrains.kotlin.analysis.api.types.KaTypeParameterType
import org.jetbrains.kotlin.idea.base.analysis.api.utils.analyzeInModalWindow
@@ -177,4 +185,19 @@ fun KtLambdaExpression.moveFunctionLiteralOutsideParenthesesIfPossible() {
if (call.canMoveLambdaOutsideParentheses()) {
call.moveFunctionLiteralOutsideParentheses()
}
+}
+
+context(KaSession)
+fun getThisQualifier(receiverValue: KaImplicitReceiverValue): String {
+ val symbol = receiverValue.symbol
+ return if ((symbol as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) {
+ //specify companion name to avoid clashes with enum entries
+ (symbol.containingSymbol as KaClassifierSymbol).name!!.asString() + "." + symbol.name!!.asString()
+ } else if (symbol is KaClassifierSymbol && symbol !is KaAnonymousObjectSymbol) {
+ "this@" + symbol.name!!.asString()
+ } else if (symbol is KaReceiverParameterSymbol && symbol.owningCallableSymbol is KaNamedSymbol) {
+ receiverValue.type.expandedSymbol?.name?.let { "this@$it" } ?: "this"
+ } else {
+ "this"
+ }
}
\ No newline at end of file
diff --git a/plugins/kotlin/refactorings/rename.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/rename/renameConflictUtils.kt b/plugins/kotlin/refactorings/rename.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/rename/renameConflictUtils.kt
index 2f1e4c1ad2d6..595b555f7f78 100644
--- a/plugins/kotlin/refactorings/rename.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/rename/renameConflictUtils.kt
+++ b/plugins/kotlin/refactorings/rename.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/rename/renameConflictUtils.kt
@@ -10,9 +10,9 @@ import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.resolution.*
import org.jetbrains.kotlin.analysis.api.symbols.*
-import org.jetbrains.kotlin.analysis.api.symbols.markers.KaNamedSymbol
import org.jetbrains.kotlin.analysis.api.types.KaErrorType
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
+import org.jetbrains.kotlin.idea.k2.refactoring.getThisQualifier
import org.jetbrains.kotlin.idea.refactoring.conflicts.filterCandidates
import org.jetbrains.kotlin.idea.refactoring.conflicts.registerRetargetJobOnPotentialCandidates
import org.jetbrains.kotlin.idea.refactoring.conflicts.renderDescription
@@ -260,20 +260,6 @@ private fun createQualifiedExpression(callExpression: KtExpression, newName: Str
val appliedSymbol = callExpression.resolveToCall()?.successfulCallOrNull>()?.partiallyAppliedSymbol
val receiver = appliedSymbol?.extensionReceiver ?: appliedSymbol?.dispatchReceiver
- fun getThisQualifier(receiverValue: KaImplicitReceiverValue): String {
- val symbol = receiverValue.symbol
- return if ((symbol as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) {
- //specify companion name to avoid clashes with enum entries
- symbol.name!!.asString()
- } else if (symbol is KaClassifierSymbol && symbol !is KaAnonymousObjectSymbol) {
- "this@" + symbol.name!!.asString()
- } else if (symbol is KaReceiverParameterSymbol && symbol.owningCallableSymbol is KaNamedSymbol) {
- receiverValue.type.expandedSymbol?.name?.let { "this@$it" } ?: "this"
- } else {
- "this"
- }
- }
-
fun getExplicitQualifier(receiverValue: KaExplicitReceiverValue): String? {
val containingSymbol = appliedSymbol?.symbol?.containingSymbol
val enumClassSymbol = containingSymbol?.containingSymbol
diff --git a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2IntentionTests.kt b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2IntentionTests.kt
index 8ff46132f384..bd9b4f972ac6 100644
--- a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2IntentionTests.kt
+++ b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2IntentionTests.kt
@@ -158,7 +158,7 @@ internal fun MutableTWorkspace.generateK2IntentionTests() {
model("${idea}intentions/indentRawString", pattern = pattern, isIgnored = true)
model("${idea}intentions/replaceAddWithPlusAssign", pattern = pattern, isIgnored = true)
model("${idea}intentions/reconstructTypeInCastOrIs", pattern = pattern, isIgnored = true)
- model("${idea}intentions/convertParameterToReceiver", pattern = pattern, isIgnored = true)
+ model("${idea}intentions/convertParameterToReceiver", pattern = pattern)
model("${idea}intentions/convertCollectionConstructorToFunction", pattern = pattern, isIgnored = true)
model("${idea}intentions/replaceMapGetOrDefault", pattern = pattern, isIgnored = true)
model("${idea}intentions/addMissingDestructuring", pattern = pattern, isIgnored = true)