diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfWhenUtils.java b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfWhenUtils.java index d13b1727371..aaeeb741fe1 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfWhenUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfWhenUtils.java @@ -20,11 +20,11 @@ public class IfWhenUtils { } public static boolean checkIfToWhen(@NotNull JetIfExpression ifExpression) { - return ifExpression.getThen() != null && ifExpression.getElse() != null; + return ifExpression.getThen() != null; } public static boolean checkWhenToIf(@NotNull JetWhenExpression whenExpression) { - return !whenExpression.getEntries().isEmpty() && JetPsiUtil.checkWhenExpressionHasSingleElse(whenExpression); + return !whenExpression.getEntries().isEmpty(); } private static void assertNotNull(JetExpression expression) { @@ -85,7 +85,6 @@ public class IfWhenUtils { JetExpression elseBranch = currIfExpression.getElse(); assertNotNull(thenBranch); - assertNotNull(elseBranch); List orBranches = splitExpressionToOrBranches(condition); @@ -97,7 +96,6 @@ public class IfWhenUtils { } } - //noinspection ConstantConditions builder.branchExpression(thenBranch); if (elseBranch instanceof JetIfExpression) { @@ -105,8 +103,9 @@ public class IfWhenUtils { } else { currIfExpression = null; - //noinspection ConstantConditions - builder.elseEntry(elseBranch); + if (elseBranch != null) { + builder.elseEntry(elseBranch); + } } } while (currIfExpression != null); diff --git a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt new file mode 100644 index 00000000000..58dd7cc95c0 --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt @@ -0,0 +1,10 @@ +fun test(n: Int) { + val s = "test" + if (n == 0) + s = "zero" + else if (n == 1) + s = "one" + else if (n == 2) + s = "two" + return s +} \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt.after b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt.after new file mode 100644 index 00000000000..6d8e609bb89 --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt.after @@ -0,0 +1,9 @@ +fun test(n: Int) { + val s = "test" + when (n) { + 0 -> s = "zero" + 1 -> s = "one" + 2 -> s = "two" + } + return s +} \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt b/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt new file mode 100644 index 00000000000..2518d2d002c --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt @@ -0,0 +1,9 @@ +fun test(n: Int) { + val s = "test" + when (n) { + 0 -> s = "zero" + 1 -> s = "one" + 2 -> s = "two" + } + return s +} \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt.after b/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt.after new file mode 100644 index 00000000000..203b7af7658 --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt.after @@ -0,0 +1,7 @@ +fun test(n: Int) { + val s = "test" + if (n == 0) s = "zero" + else if (n == 1) s = "one" + else if (n == 2) s = "two" + return s +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/beforeTwoElseBranchesInWhen.kt b/idea/testData/quickfix/when/beforeTwoElseBranchesInWhen.kt index de076791f12..4525fbfd3f1 100644 --- a/idea/testData/quickfix/when/beforeTwoElseBranchesInWhen.kt +++ b/idea/testData/quickfix/when/beforeTwoElseBranchesInWhen.kt @@ -4,8 +4,11 @@ // ERROR: Unreachable code // ERROR: Unreachable code // ACTION: Disable 'Eliminate Argument of 'when'' +// ACTION: Disable 'Replace 'when' with 'if'' +// ACTION: Edit intention settings // ACTION: Edit intention settings // ACTION: Eliminate argument of 'when' +// ACTION: Replace 'when' with 'if' package foo fun foo() { diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java index 615bdf7c68c..d0a0fef1155 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java @@ -451,6 +451,11 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestIfToWhen("idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithRangeTestsAndUnparenthesizedMultiConditions.kt"); } + @TestMetadata("ifWithoutElse.kt") + public void testIfWithoutElse() throws Exception { + doTestIfToWhen("idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithoutElse.kt"); + } + @TestMetadata("whenWithMultipleConditionTypes.kt") public void testWhenWithMultipleConditionTypes() throws Exception { doTestIfToWhen("idea/testData/intentions/branched/ifWhen/ifToWhen/whenWithMultipleConditionTypes.kt"); @@ -504,6 +509,11 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestWhenToIf("idea/testData/intentions/branched/ifWhen/whenToIf/whenWithRangeTestsAndMultiConditions.kt"); } + @TestMetadata("whenWithoutElse.kt") + public void testWhenWithoutElse() throws Exception { + doTestWhenToIf("idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutElse.kt"); + } + @TestMetadata("whenWithoutSubject.kt") public void testWhenWithoutSubject() throws Exception { doTestWhenToIf("idea/testData/intentions/branched/ifWhen/whenToIf/whenWithoutSubject.kt");