From f0e467e47467af7247ee08b20981511cd836d626 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 30 Nov 2015 14:43:03 +0300 Subject: [PATCH] Rewrite mixed multiple- and single-condition 'when' properly. #KT-10229 Fixed --- .../CommaInWhenConditionWithoutArgumentFix.kt | 10 ++++++---- .../commasInConditionWithNoArguments.kt | 6 ++++-- .../commasInConditionWithNoArguments.kt.after | 6 ++++-- .../commasInConditionWithNoArguments2.kt | 8 ++++++++ .../commasInConditionWithNoArguments2.kt.after | 8 ++++++++ .../when/commasInConditionWithNoArguments.kt | 6 ++++-- .../when/commasInConditionWithNoArguments.kt.after | 6 ++++-- .../when/commasInConditionWithNoArguments2.kt | 8 ++++++++ .../when/commasInConditionWithNoArguments2.kt.after | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 12 ++++++++++++ 10 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt create mode 100644 idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt.after create mode 100644 idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt create mode 100644 idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/CommaInWhenConditionWithoutArgumentFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/CommaInWhenConditionWithoutArgumentFix.kt index c0b77aa0386..b140a795a7e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/CommaInWhenConditionWithoutArgumentFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/CommaInWhenConditionWithoutArgumentFix.kt @@ -52,10 +52,12 @@ class CommaInWhenConditionWithoutArgumentFix(element: PsiElement) : KotlinQuickF private fun replaceCommasWithOrsInWhenExpression(whenExpression: KtWhenExpression) { for (whenEntry in whenExpression.entries) { - val conditionsData = getConditionsDataOrNull(whenEntry) ?: return - val replacement = KtPsiFactory(whenEntry).combineWhenConditions(conditionsData.conditions, null) ?: return - whenEntry.deleteChildRange(conditionsData.first, conditionsData.last) - whenEntry.addBefore(replacement, conditionsData.arrow) + if (whenEntry.conditions.size > 1) { + val conditionsData = getConditionsDataOrNull(whenEntry) ?: return + val replacement = KtPsiFactory(whenEntry).combineWhenConditions(conditionsData.conditions, null) ?: return + whenEntry.deleteChildRange(conditionsData.first, conditionsData.last) + whenEntry.addBefore(replacement, conditionsData.arrow) + } } } diff --git a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt index e8cb49fee8b..9967424c9a9 100644 --- a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt +++ b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt @@ -2,8 +2,10 @@ fun test(i: Int, j: Int) { var b = false when { - i > 0, j > 0 -> { /* some code 1 */ } - i < 0, j < 0 -> { /* some code 2 */ } + i == 0 -> { /* code 1 */ } + i > 0, j > 0 -> { /* code 2 */ } + j == 0 -> { /* code 3 */ } + i < 0, j < 0, j > i -> { /* code 4 */ } else -> { /* other code */ } } } \ No newline at end of file diff --git a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt.after b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt.after index 6b10be63f60..49cb116ac7b 100644 --- a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt.after +++ b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt.after @@ -2,8 +2,10 @@ fun test(i: Int, j: Int) { var b = false when { - i > 0 || j > 0 -> { /* some code 1 */ } - i < 0 || j < 0 -> { /* some code 2 */ } + i == 0 -> { /* code 1 */ } + i > 0 || j > 0 -> { /* code 2 */ } + j == 0 -> { /* code 3 */ } + i < 0 || j < 0 || j > i -> { /* code 4 */ } else -> { /* other code */ } } } \ No newline at end of file diff --git a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt new file mode 100644 index 00000000000..7991e30c837 --- /dev/null +++ b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt @@ -0,0 +1,8 @@ +// "Replace ',' with '||' in when" "true" +fun test(a: Boolean, b: Boolean, c: Boolean) { + val c = when { + a, b -> "a" + c -> "b" + else -> "e" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt.after b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt.after new file mode 100644 index 00000000000..5b55bd2e79d --- /dev/null +++ b/idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt.after @@ -0,0 +1,8 @@ +// "Replace ',' with '||' in when" "true" +fun test(a: Boolean, b: Boolean, c: Boolean) { + val c = when { + a || b -> "a" + c -> "b" + else -> "e" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt b/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt index e8cb49fee8b..9967424c9a9 100644 --- a/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt +++ b/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt @@ -2,8 +2,10 @@ fun test(i: Int, j: Int) { var b = false when { - i > 0, j > 0 -> { /* some code 1 */ } - i < 0, j < 0 -> { /* some code 2 */ } + i == 0 -> { /* code 1 */ } + i > 0, j > 0 -> { /* code 2 */ } + j == 0 -> { /* code 3 */ } + i < 0, j < 0, j > i -> { /* code 4 */ } else -> { /* other code */ } } } \ No newline at end of file diff --git a/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt.after b/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt.after index 6b10be63f60..49cb116ac7b 100644 --- a/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt.after +++ b/idea/testData/quickfix/when/commasInConditionWithNoArguments.kt.after @@ -2,8 +2,10 @@ fun test(i: Int, j: Int) { var b = false when { - i > 0 || j > 0 -> { /* some code 1 */ } - i < 0 || j < 0 -> { /* some code 2 */ } + i == 0 -> { /* code 1 */ } + i > 0 || j > 0 -> { /* code 2 */ } + j == 0 -> { /* code 3 */ } + i < 0 || j < 0 || j > i -> { /* code 4 */ } else -> { /* other code */ } } } \ No newline at end of file diff --git a/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt b/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt new file mode 100644 index 00000000000..7991e30c837 --- /dev/null +++ b/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt @@ -0,0 +1,8 @@ +// "Replace ',' with '||' in when" "true" +fun test(a: Boolean, b: Boolean, c: Boolean) { + val c = when { + a, b -> "a" + c -> "b" + else -> "e" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt.after b/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt.after new file mode 100644 index 00000000000..5b55bd2e79d --- /dev/null +++ b/idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt.after @@ -0,0 +1,8 @@ +// "Replace ',' with '||' in when" "true" +fun test(a: Boolean, b: Boolean, c: Boolean) { + val c = when { + a || b -> "a" + c -> "b" + else -> "e" + } +} \ 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 f41b08464ae..69ccef7f092 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4506,6 +4506,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments.kt"); doTest(fileName); } + + @TestMetadata("commasInConditionWithNoArguments2.kt") + public void testCommasInConditionWithNoArguments2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/commasInWhenWithoutArgument/commasInConditionWithNoArguments2.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/quickfix/migration/conflictingExtension") @@ -7275,6 +7281,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("commasInConditionWithNoArguments2.kt") + public void testCommasInConditionWithNoArguments2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/when/commasInConditionWithNoArguments2.kt"); + doTest(fileName); + } + @TestMetadata("continueInWhen.kt") public void testContinueInWhen() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/when/continueInWhen.kt");