From e481ed756d6bd7ad33148217108cb7d397a20708 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 11 Jun 2015 19:08:07 +0300 Subject: [PATCH] Change Signature: Fix transfer of argument to receiver position #KT-7987 Fixed --- .../changeSignature/usages/JetFunctionCallUsage.java | 12 +++++------- .../ConvertParameterToReceiverAddParensAfter.kt | 5 +++++ .../ConvertParameterToReceiverAddParensBefore.kt | 5 +++++ .../changeSignature/JetChangeSignatureTest.java | 6 ++++++ 4 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/ConvertParameterToReceiverAddParensBefore.kt 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() {