Change Signature: Recreate call expression when converting receiver to parameter

#KT-8878 Fixed
This commit is contained in:
Alexey Sedunov
2015-09-07 13:52:49 +03:00
parent 9e11a20006
commit b4410c625f
5 changed files with 36 additions and 2 deletions
@@ -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");