From f9f8fd055b0fa76a0870d163c6d680c9884cfcc4 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 8 Sep 2020 11:18:24 +0900 Subject: [PATCH] Convert receiver to parameter: place value argument list after type argument list #KT-41499 Fixed --- .../changeSignature/usages/KotlinFunctionCallUsage.kt | 5 +++-- .../usedWithTypeArgumentAndLambdaArgument.kt | 5 +++++ .../usedWithTypeArgumentAndLambdaArgument.kt.after | 5 +++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt create mode 100644 idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt index 204e2c0a8a4..1cbe268a4aa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt @@ -77,8 +77,9 @@ class KotlinFunctionCallUsage( changeNameIfNeeded(changeInfo, element) if (element.valueArgumentList == null && changeInfo.isParameterSetOrOrderChanged && element.lambdaArguments.isNotEmpty()) { - element.calleeExpression?.let { - element.addAfter(KtPsiFactory(element).createCallArguments("()"), it) + val anchor = element.typeArgumentList ?: element.calleeExpression + if (anchor != null) { + element.addAfter(KtPsiFactory(element).createCallArguments("()"), anchor) } } if (element.valueArgumentList != null) { diff --git a/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt b/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt new file mode 100644 index 00000000000..51d38a753da --- /dev/null +++ b/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt @@ -0,0 +1,5 @@ +fun Any.foo(callback: () -> Unit) {} + +fun bar() { + "".foo {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt.after b/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt.after new file mode 100644 index 00000000000..a5c58451ca4 --- /dev/null +++ b/idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt.after @@ -0,0 +1,5 @@ +fun foo(any: Any, callback: () -> Unit) {} + +fun bar() { + foo("") {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index aada917c937..2dbe86643ba 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -6472,6 +6472,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertReceiverToParameter/usedInAnonymousObject.kt"); } + @TestMetadata("usedWithTypeArgumentAndLambdaArgument.kt") + public void testUsedWithTypeArgumentAndLambdaArgument() throws Exception { + runTest("idea/testData/intentions/convertReceiverToParameter/usedWithTypeArgumentAndLambdaArgument.kt"); + } + @TestMetadata("validOverload.kt") public void testValidOverload() throws Exception { runTest("idea/testData/intentions/convertReceiverToParameter/validOverload.kt");