From cc0cb30b534d816e13ae88032a1535b54b2d118b Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 18 Jan 2020 15:09:14 +0900 Subject: [PATCH] "Remove single lambda parameter declaration": do not suggest when lambda is directly under 'if/when' #KT-35995 Fixed --- .../RemoveSingleLambdaParameterFix.kt | 3 +++ .../removeSingleLambdaParameter/inIf.kt | 8 ++++++++ .../removeSingleLambdaParameter/inIf2.kt | 5 +++++ .../inIf2.kt.after | 5 +++++ .../removeSingleLambdaParameter/inWhen.kt | 11 ++++++++++ .../removeSingleLambdaParameter/inWhen2.kt | 8 ++++++++ .../inWhen2.kt.after | 8 ++++++++ .../idea/quickfix/QuickFixTestGenerated.java | 20 +++++++++++++++++++ 8 files changed, 68 insertions(+) create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inIf.kt create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt.after create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inWhen.kt create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt create mode 100644 idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveSingleLambdaParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveSingleLambdaParameterFix.kt index 168dc8dcb27..81d4bb0e9ee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveSingleLambdaParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveSingleLambdaParameterFix.kt @@ -48,6 +48,9 @@ class RemoveSingleLambdaParameterFix(element: KtParameter) : KotlinQuickFixActio val lambda = parameterList.parent.parent as? KtLambdaExpression ?: return null + val lambdaParent = lambda.parent + if (lambdaParent is KtWhenEntry || lambdaParent is KtContainerNodeForControlStructureBody) return null + val property = lambda.getStrictParentOfType() if (property != null && property.typeReference == null) return null diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inIf.kt b/idea/testData/quickfix/removeSingleLambdaParameter/inIf.kt new file mode 100644 index 00000000000..92be3180486 --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inIf.kt @@ -0,0 +1,8 @@ +// "Remove single lambda parameter declaration" "false" +// ACTION: Add braces to 'if' statement +// ACTION: Remove explicit lambda parameter types (may break code) +// ACTION: Rename to _ +fun test(i: Int) { + val p: (String) -> Boolean = + if (i == 1) { s: String -> true } else { s: String -> false } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt b/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt new file mode 100644 index 00000000000..48080665a41 --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt @@ -0,0 +1,5 @@ +// "Remove single lambda parameter declaration" "true" +fun test(i: Int) { + val p: (String) -> Boolean = + if (i == 1) { { s -> true } } else { s -> false } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt.after b/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt.after new file mode 100644 index 00000000000..be3c978627b --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt.after @@ -0,0 +1,5 @@ +// "Remove single lambda parameter declaration" "true" +fun test(i: Int) { + val p: (String) -> Boolean = + if (i == 1) { { true } } else { s -> false } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inWhen.kt b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen.kt new file mode 100644 index 00000000000..ea39e9b07d7 --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen.kt @@ -0,0 +1,11 @@ +// "Remove single lambda parameter declaration" "false" +// ACTION: Add braces to 'when' entry +// ACTION: Remove explicit lambda parameter types (may break code) +// ACTION: Rename to _ +fun test(i: Int) { + val p: (String) -> Boolean = + when (i) { + 1 -> { s: String -> true } + else -> { s: String -> false } + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt new file mode 100644 index 00000000000..6b564bdc733 --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt @@ -0,0 +1,8 @@ +// "Remove single lambda parameter declaration" "true" +fun test(i: Int) { + val p: (String) -> Boolean = + when (i) { + 1 -> { { s -> true } } + else -> { s -> false } + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt.after b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt.after new file mode 100644 index 00000000000..2b595e0b57a --- /dev/null +++ b/idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt.after @@ -0,0 +1,8 @@ +// "Remove single lambda parameter declaration" "true" +fun test(i: Int) { + val p: (String) -> Boolean = + when (i) { + 1 -> { { true } } + else -> { s -> false } + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 5a11b33bf8d..6e0079486cb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -10655,6 +10655,26 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/quickfix/removeSingleLambdaParameter"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), null, true); } + @TestMetadata("inIf.kt") + public void testInIf() throws Exception { + runTest("idea/testData/quickfix/removeSingleLambdaParameter/inIf.kt"); + } + + @TestMetadata("inIf2.kt") + public void testInIf2() throws Exception { + runTest("idea/testData/quickfix/removeSingleLambdaParameter/inIf2.kt"); + } + + @TestMetadata("inWhen.kt") + public void testInWhen() throws Exception { + runTest("idea/testData/quickfix/removeSingleLambdaParameter/inWhen.kt"); + } + + @TestMetadata("inWhen2.kt") + public void testInWhen2() throws Exception { + runTest("idea/testData/quickfix/removeSingleLambdaParameter/inWhen2.kt"); + } + @TestMetadata("multiple.kt") public void testMultiple() throws Exception { runTest("idea/testData/quickfix/removeSingleLambdaParameter/multiple.kt");