Change Signature: Recreate call expression when converting receiver to parameter
#KT-8878 Fixed
This commit is contained in:
+8
-2
@@ -45,7 +45,10 @@ import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor;
|
|||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage;
|
import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.*;
|
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch;
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument;
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
|
||||||
@@ -460,7 +463,7 @@ public class JetFunctionCallUsage extends JetUsageInfo<JetCallElement> {
|
|||||||
|
|
||||||
JetElement newElement = element;
|
JetElement newElement = element;
|
||||||
if (newReceiverInfo != originalReceiverInfo) {
|
if (newReceiverInfo != originalReceiverInfo) {
|
||||||
PsiElement replacingElement = element;
|
PsiElement replacingElement;
|
||||||
if (newReceiverInfo != null) {
|
if (newReceiverInfo != null) {
|
||||||
ValueArgument receiverArgument = argumentMap.get(newReceiverInfo.getOldIndex());
|
ValueArgument receiverArgument = argumentMap.get(newReceiverInfo.getOldIndex());
|
||||||
JetExpression extensionReceiverExpression = receiverArgument != null ? receiverArgument.getArgumentExpression() : null;
|
JetExpression extensionReceiverExpression = receiverArgument != null ? receiverArgument.getArgumentExpression() : null;
|
||||||
@@ -472,6 +475,9 @@ public class JetFunctionCallUsage extends JetUsageInfo<JetCallElement> {
|
|||||||
|
|
||||||
replacingElement = PsiPackage.createExpressionByPattern(psiFactory, "$0.$1", receiver, element);
|
replacingElement = PsiPackage.createExpressionByPattern(psiFactory, "$0.$1", receiver, element);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
replacingElement = psiFactory.createExpression(element.getText());
|
||||||
|
}
|
||||||
|
|
||||||
newElement = (JetElement) elementToReplace.replace(replacingElement);
|
newElement = (JetElement) elementToReplace.replace(replacingElement);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// CHECK_ERRORS_AFTER
|
||||||
|
|
||||||
|
fun <T> <caret>T.bar() {
|
||||||
|
toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> foo(a: T) {
|
||||||
|
a.bar()
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// CHECK_ERRORS_AFTER
|
||||||
|
|
||||||
|
fun <T> bar(t: T) {
|
||||||
|
t.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> foo(a: T) {
|
||||||
|
bar(a)
|
||||||
|
}
|
||||||
@@ -123,6 +123,10 @@ public abstract class AbstractIntentionTest extends KotlinCodeInsightTestCase {
|
|||||||
DirectiveBasedActionUtils.INSTANCE$.checkForUnexpectedErrors((JetFile) getFile());
|
DirectiveBasedActionUtils.INSTANCE$.checkForUnexpectedErrors((JetFile) getFile());
|
||||||
|
|
||||||
doTestFor(pathToFile, intentionAction, fileText);
|
doTestFor(pathToFile, intentionAction, fileText);
|
||||||
|
|
||||||
|
if (InTextDirectivesUtils.isDirectiveDefined(fileText, "// CHECK_ERRORS_AFTER")) {
|
||||||
|
DirectiveBasedActionUtils.INSTANCE$.checkForUnexpectedErrors((JetFile) getFile());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (isWithRuntime) {
|
if (isWithRuntime) {
|
||||||
|
|||||||
@@ -3682,6 +3682,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/convertReceiverToParameter"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/convertReceiverToParameter"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericReceiver.kt")
|
||||||
|
public void testGenericReceiver() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/genericReceiver.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localFun.kt")
|
@TestMetadata("localFun.kt")
|
||||||
public void testLocalFun() throws Exception {
|
public void testLocalFun() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/localFun.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/localFun.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user