From cc259c2d1512bdba8fa505bfd8b8a293d2554111 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 16 Dec 2015 14:17:32 +0300 Subject: [PATCH] Intention convert object literal to lambda should add parameters if there are more than one --- .../idea/intentions/ObjectLiteralToLambdaIntention.kt | 2 +- .../objectLiteralToLambda/ParametersNotUsed.kt | 8 ++++---- .../objectLiteralToLambda/ParametersNotUsed.kt.after | 6 +++--- .../ParametersNotUsedMoreThanOne.kt | 11 +++++++++++ .../ParametersNotUsedMoreThanOne.kt.after | 9 +++++++++ .../objectLiteralToLambda/inspectionData/expected.xml | 8 ++++++++ .../idea/intentions/IntentionTestGenerated.java | 6 ++++++ 7 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt create mode 100644 idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt index 6eba9c31102..875502e1fc3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt @@ -84,7 +84,7 @@ class ObjectLiteralToLambdaIntention : SelfTargetingRangeIntention ReferencesSearch.search(parameter, LocalSearchScope(body)).any() } + val needParameters = parameters.count() > 1 || parameters.any { parameter -> ReferencesSearch.search(parameter, LocalSearchScope(body)).any() } if (needParameters) { parameters.forEachIndexed { index, parameter -> if (index > 0) { diff --git a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt index e26359cc3b2..645cb4baa99 100644 --- a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt +++ b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt @@ -1,11 +1,11 @@ // WITH_RUNTIME import java.io.File -import java.io.FilenameFilter +import java.io.FileFilter -fun foo(filter: FilenameFilter) {} +fun foo(filter: FileFilter) {} fun bar() { - foo(object: FilenameFilter { - override fun accept(file: File, name: String) = true + foo(object: FileFilter { + override fun accept(file: File) = true }) } diff --git a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt.after b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt.after index 8d8f5c2e8e4..9d977849bfc 100644 --- a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt.after +++ b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsed.kt.after @@ -1,9 +1,9 @@ // WITH_RUNTIME import java.io.File -import java.io.FilenameFilter +import java.io.FileFilter -fun foo(filter: FilenameFilter) {} +fun foo(filter: FileFilter) {} fun bar() { - foo(FilenameFilter { true }) + foo(FileFilter { true }) } diff --git a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt new file mode 100644 index 00000000000..e26359cc3b2 --- /dev/null +++ b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt @@ -0,0 +1,11 @@ +// WITH_RUNTIME +import java.io.File +import java.io.FilenameFilter + +fun foo(filter: FilenameFilter) {} + +fun bar() { + foo(object: FilenameFilter { + override fun accept(file: File, name: String) = true + }) +} diff --git a/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt.after b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt.after new file mode 100644 index 00000000000..1787b939ddf --- /dev/null +++ b/idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt.after @@ -0,0 +1,9 @@ +// WITH_RUNTIME +import java.io.File +import java.io.FilenameFilter + +fun foo(filter: FilenameFilter) {} + +fun bar() { + foo(FilenameFilter { file, name -> true }) +} diff --git a/idea/testData/intentions/objectLiteralToLambda/inspectionData/expected.xml b/idea/testData/intentions/objectLiteralToLambda/inspectionData/expected.xml index 31d96c362c4..68282e6ebdc 100644 --- a/idea/testData/intentions/objectLiteralToLambda/inspectionData/expected.xml +++ b/idea/testData/intentions/objectLiteralToLambda/inspectionData/expected.xml @@ -52,6 +52,14 @@ Convert object literal to lambda Convert to lambda + + ParametersNotUsedMoreThanOne.kt + 8 + light_idea_test_case + + Convert object literal to lambda + Convert to lambda + NoSamAdapterNeeded.kt diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 689f306db58..05906a41b26 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -6183,6 +6183,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("ParametersNotUsedMoreThanOne.kt") + public void testParametersNotUsedMoreThanOne() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/objectLiteralToLambda/ParametersNotUsedMoreThanOne.kt"); + doTest(fileName); + } + @TestMetadata("QualifiedReturn.kt") public void testQualifiedReturn() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/objectLiteralToLambda/QualifiedReturn.kt");