Change Signature: Fix transfer of argument to receiver position

#KT-7987 Fixed
This commit is contained in:
Alexey Sedunov
2015-06-11 19:08:07 +03:00
parent 9bfa437c96
commit e481ed756d
4 changed files with 21 additions and 7 deletions
@@ -415,14 +415,12 @@ public class JetFunctionCallUsage extends JetUsageInfo<JetCallElement> {
ValueArgument receiverArgument = argumentMap.get(newReceiverInfo.getOldIndex());
JetExpression extensionReceiverExpression = receiverArgument != null ? receiverArgument.getArgumentExpression() : null;
JetExpression defaultValueForCall = newReceiverInfo.getDefaultValueForCall();
String receiverText = extensionReceiverExpression != null
? extensionReceiverExpression.getText()
: defaultValueForCall != null ? defaultValueForCall.getText() : "";
if (receiverText.isEmpty()) {
receiverText = "_";
}
JetExpression receiver =
extensionReceiverExpression != null ? psiFactory.createExpression(extensionReceiverExpression.getText())
: defaultValueForCall != null ? defaultValueForCall
: psiFactory.createExpression("_");
replacingElement = psiFactory.createExpression(receiverText + "." + element.getText());
replacingElement = PsiPackage.createExpressionByPattern(psiFactory, "$0.$1", receiver, element);
}
newElement = (JetElement) elementToReplace.replace(replacingElement);
@@ -0,0 +1,5 @@
fun f(list: List<Any>) {
list.filter { (it as String).foo() }
}
fun String.foo(): Boolean = true
@@ -0,0 +1,5 @@
fun f(list: List<Any>) {
list.filter { foo(it as String) }
}
fun <caret>foo(s: String): Boolean = true
@@ -924,6 +924,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase {
doTest(changeInfo);
}
public void testConvertParameterToReceiverAddParens() throws Exception {
JetChangeInfo changeInfo = getChangeInfo();
changeInfo.setReceiverParameterInfo(changeInfo.getNewParameters()[0]);
doTest(changeInfo);
}
@NotNull
@Override
protected String getTestDataPath() {