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.resolve.BindingContext;
|
||||
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.scopes.receivers.ExpressionReceiver;
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
|
||||
@@ -460,7 +463,7 @@ public class JetFunctionCallUsage extends JetUsageInfo<JetCallElement> {
|
||||
|
||||
JetElement newElement = element;
|
||||
if (newReceiverInfo != originalReceiverInfo) {
|
||||
PsiElement replacingElement = element;
|
||||
PsiElement replacingElement;
|
||||
if (newReceiverInfo != null) {
|
||||
ValueArgument receiverArgument = argumentMap.get(newReceiverInfo.getOldIndex());
|
||||
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);
|
||||
}
|
||||
else {
|
||||
replacingElement = psiFactory.createExpression(element.getText());
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
doTestFor(pathToFile, intentionAction, fileText);
|
||||
|
||||
if (InTextDirectivesUtils.isDirectiveDefined(fileText, "// CHECK_ERRORS_AFTER")) {
|
||||
DirectiveBasedActionUtils.INSTANCE$.checkForUnexpectedErrors((JetFile) getFile());
|
||||
}
|
||||
}
|
||||
finally {
|
||||
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);
|
||||
}
|
||||
|
||||
@TestMetadata("genericReceiver.kt")
|
||||
public void testGenericReceiver() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/genericReceiver.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("localFun.kt")
|
||||
public void testLocalFun() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertReceiverToParameter/localFun.kt");
|
||||
|
||||
Reference in New Issue
Block a user