diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetFunctionCallUsage.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetFunctionCallUsage.java index 1892988259a..f88883571d3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetFunctionCallUsage.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetFunctionCallUsage.java @@ -415,14 +415,12 @@ public class JetFunctionCallUsage extends JetUsageInfo { 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); diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensAfter.kt b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensAfter.kt new file mode 100644 index 00000000000..3e8f578e17e --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensAfter.kt @@ -0,0 +1,5 @@ +fun f(list: List) { + list.filter { (it as String).foo() } +} + +fun String.foo(): Boolean = true \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensBefore.kt b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensBefore.kt new file mode 100644 index 00000000000..d705f7790fb --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensBefore.kt @@ -0,0 +1,5 @@ +fun f(list: List) { + list.filter { foo(it as String) } +} + +fun foo(s: String): Boolean = true \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java index cc9b42a83ea..cb03ebe23b0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -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() {