diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 95dddc83deb..19f0dc3f072 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -3626,13 +3626,7 @@ The "returned" value of try expression with no finally is either the last expres } Label end = new Label(); - boolean hasElse = false; - for (JetWhenEntry whenEntry : expression.getEntries()) { - if (whenEntry.isElse()) { - hasElse = true; - break; - } - } + boolean hasElse = JetPsiUtil.checkWhenExpressionHasSingleElse(expression); Label nextCondition = null; for (JetWhenEntry whenEntry : expression.getEntries()) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 95bf2b0b285..f8a50903fcf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -682,4 +682,14 @@ public class JetPsiUtil { return false; } + + public static boolean checkWhenExpressionHasSingleElse(JetWhenExpression whenExpression) { + int elseCount = 0; + for (JetWhenEntry entry : whenExpression.getEntries()) { + if (entry.isElse()) { + elseCount++; + } + } + return (elseCount == 1); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/codeTransformations/branchedTransformations/BranchedFoldingUtils.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/codeTransformations/branchedTransformations/BranchedFoldingUtils.java index f5ca4ae1133..6dcb9f378cc 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/codeTransformations/branchedTransformations/BranchedFoldingUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/codeTransformations/branchedTransformations/BranchedFoldingUtils.java @@ -88,23 +88,19 @@ public class BranchedFoldingUtils { } private static boolean checkFoldableWhenExpressionWithAssignments(JetWhenExpression whenExpression) { + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(whenExpression)) return false; + List entries = whenExpression.getEntries(); if (entries.isEmpty()) return false; - boolean hasElse = false; List assignments = new ArrayList(); for (JetWhenEntry entry : entries) { - if (entry.isElse()) { - hasElse = true; - } JetBinaryExpression assignment = checkAndGetFoldableBranchedAssignment(entry.getExpression()); if (assignment == null) return false; assignments.add(assignment); } - if (!hasElse) return false; - assert !assignments.isEmpty(); JetBinaryExpression firstAssignment = assignments.get(0); @@ -121,24 +117,22 @@ public class BranchedFoldingUtils { } private static boolean checkFoldableWhenExpressionWithReturns(JetWhenExpression whenExpression) { + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(whenExpression)) return false; + List entries = whenExpression.getEntries(); if (entries.isEmpty()) return false; - boolean hasElse = false; for (JetWhenEntry entry : entries) { - if (entry.isElse()) { - hasElse = true; - } if (checkAndGetFoldableBranchedReturn(entry.getExpression()) == null) return false; } - return hasElse; + return true; } private static boolean checkFoldableIfExpressionWithAsymmetricReturns(JetIfExpression ifExpression) { if (checkAndGetFoldableBranchedReturn(ifExpression.getThen()) == null || - checkAndGetFoldableBranchedReturn(ifExpression.getElse()) != null) { + ifExpression.getElse() != null) { return false; } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/MoveWhenElseBranchFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/MoveWhenElseBranchFix.java index 9d4dad15056..132d8989c9d 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/MoveWhenElseBranchFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/MoveWhenElseBranchFix.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.psi.JetPsiFactory; +import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.psi.JetWhenEntry; import org.jetbrains.jet.lang.psi.JetWhenExpression; import org.jetbrains.jet.plugin.JetBundle; @@ -53,13 +54,7 @@ public class MoveWhenElseBranchFix extends JetIntentionAction if (!super.isAvailable(project, editor, file)) { return false; } - int elseCount = 0; - for (JetWhenEntry entry : element.getEntries()) { - if (entry.isElse()) { - elseCount++; - } - } - return (elseCount == 1); + return JetPsiUtil.checkWhenExpressionHasSingleElse(element); } @Override