From 937b8725c62d0a7a3ffe4a7bec91ccd9fbf4255b Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 26 Oct 2015 20:10:46 +0300 Subject: [PATCH] Change Signature/Rename: Fix processing of named arguments when renaming parameter of extension function #KT-8605 Fixed --- .../changeSignature/usages/JetFunctionCallUsage.java | 9 +++++---- .../RenameExtensionParameterWithNamedArgsAfter.kt | 5 +++++ .../RenameExtensionParameterWithNamedArgsBefore.kt | 5 +++++ .../changeSignature/JetChangeSignatureTest.java | 6 ++++++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsBefore.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 3178770c22f..0a4e81865c8 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 @@ -559,11 +559,12 @@ public class JetFunctionCallUsage extends JetUsageInfo { if (argumentNameExpression != null) { Integer oldParameterIndex = changeInfo.getOldParameterIndex(argumentNameExpression.getReferencedName()); + if (oldParameterIndex == null) continue; - if (oldParameterIndex != null) { - JetParameterInfo parameterInfo = changeInfo.getNewParameters()[oldParameterIndex]; - changeArgumentName(argumentNameExpression, parameterInfo); - } + JetParameterInfo parameterInfo = changeInfo.getNewParameters()[ + changeInfo.getReceiverParameterInfo() != null ? oldParameterIndex + 1 : oldParameterIndex + ]; + changeArgumentName(argumentNameExpression, parameterInfo); } } } diff --git a/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsAfter.kt b/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsAfter.kt new file mode 100644 index 00000000000..4c1ec50e1ae --- /dev/null +++ b/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsAfter.kt @@ -0,0 +1,5 @@ +fun Int.foo(a: Int, bb: Int): Int = a + bb + +fun test() { + 0.foo(1, bb = 2) +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsBefore.kt b/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsBefore.kt new file mode 100644 index 00000000000..7eaf5696079 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/RenameExtensionParameterWithNamedArgsBefore.kt @@ -0,0 +1,5 @@ +fun Int.foo(a: Int, b: Int): Int = a + b + +fun test() { + 0.foo(1, b = 2) +} \ 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 b0e7dd2a8cd..a0f88351b9b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -1326,6 +1326,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testRenameExtensionParameterWithNamedArgs() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + changeInfo.getNewParameters()[2].setName("bb"); + doTest(changeInfo); + } + private List editors = null; private static final String[] EXTENSIONS = {".kt", ".java"};