From 23132ad51957f4d1e5e0009e61be8409ffdca067 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 8 Sep 2016 20:01:02 +0300 Subject: [PATCH] Convert lambda to reference intention: apply shorten references to callable reference only, not to the whole argument list --- .../idea/intentions/ConvertLambdaToReferenceIntention.kt | 4 +++- .../intentions/convertLambdaToReference/mapToFqName.kt | 5 +++++ .../convertLambdaToReference/mapToFqName.kt.after | 5 +++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/convertLambdaToReference/mapToFqName.kt create mode 100644 idea/testData/intentions/convertLambdaToReference/mapToFqName.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index 3ff1924f5f4..28351338c0f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -201,7 +201,9 @@ class ConvertLambdaToReferenceIntention : SelfTargetingOffsetIndependentIntentio (lambdaArgument.replace(newArgumentList) as? KtElement)?.let { ShortenReferences.DEFAULT.process(it) } } else { - (argumentList.replace(newArgumentList) as? KtElement)?.let { ShortenReferences.DEFAULT.process(it) } + (argumentList.replace(newArgumentList) as? KtValueArgumentList)?.let { + ShortenReferences.DEFAULT.process(it.arguments.last()) + } lambdaArgument.delete() } } diff --git a/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt b/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt new file mode 100644 index 00000000000..9bc89703819 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME + +fun bar(s: String) = s.length + +val x = listOf("Jack", "Tom").mapTo(kotlin.collections.hashSetOf()) { w -> bar(w) } \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt.after b/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt.after new file mode 100644 index 00000000000..a08df6c7fc0 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/mapToFqName.kt.after @@ -0,0 +1,5 @@ +// WITH_RUNTIME + +fun bar(s: String) = s.length + +val x = listOf("Jack", "Tom").mapTo(kotlin.collections.hashSetOf(), ::bar) \ 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 d3d37eedc6a..7d749381601 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -3994,6 +3994,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("mapToFqName.kt") + public void testMapToFqName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/mapToFqName.kt"); + doTest(fileName); + } + @TestMetadata("member.kt") public void testMember() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/member.kt");