diff --git a/src/org/jetbrains/jet/j2k/ast/CaseContainer.java b/src/org/jetbrains/jet/j2k/ast/CaseContainer.java index 9d1bbfddb16..ceef2f43ce9 100644 --- a/src/org/jetbrains/jet/j2k/ast/CaseContainer.java +++ b/src/org/jetbrains/jet/j2k/ast/CaseContainer.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.util.AstUtil; import java.util.LinkedList; import java.util.List; @@ -9,10 +10,10 @@ import java.util.List; * @author ignatov */ public class CaseContainer extends Statement { - private Statement myCaseStatement; + private List myCaseStatement; private Block myBlock; - public CaseContainer(final Statement caseStatement, final List statements) { + public CaseContainer(final List caseStatement, final List statements) { myCaseStatement = caseStatement; List newStatements = new LinkedList(); for (Statement s : statements) @@ -24,6 +25,6 @@ public class CaseContainer extends Statement { @NotNull @Override public String toKotlin() { - return myCaseStatement.toKotlin() + SPACE + "=>" + SPACE + myBlock.toKotlin(); + return AstUtil.joinNodes(myCaseStatement, COMMA_WITH_SPACE) + SPACE + "=>" + SPACE + myBlock.toKotlin(); } } diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 9f29877efe4..0307beac425 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.ast.*; import java.util.Arrays; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -210,15 +209,20 @@ public class StatementVisitor extends ElementVisitor { @NotNull private static List listToCases(@NotNull final List> cases) { List result = new LinkedList(); + List pendingLabels = new LinkedList(); for (List ls : cases) { assert ls.size() > 0; PsiStatement label = ls.get(0); assert label instanceof PsiSwitchLabelStatement; - result.add(new CaseContainer(statementToStatement(label), - ls.size() > 1 ? - statementsToStatementList(ls.subList(1, ls.size()).toArray(new PsiStatement[ls.size() - 1])) : - Collections.emptyList() - )); + if (ls.size() > 1) { + pendingLabels.add(statementToStatement(label)); + result.add(new CaseContainer(pendingLabels, + statementsToStatementList(ls.subList(1, ls.size()).toArray(new PsiStatement[ls.size() - 1])) + )); + pendingLabels = new LinkedList(); + } + else // ls.size() == 1 + pendingLabels.add(statementToStatement(label)); } return result; } diff --git a/testData/ast/switch/file/throwDown.jav b/testData/ast/switch/file/throwDown.jav new file mode 100644 index 00000000000..a6e4c557a72 --- /dev/null +++ b/testData/ast/switch/file/throwDown.jav @@ -0,0 +1,24 @@ +package switch_demo; + +public class SwitchDemo { + public static void main(String[] args) { + int month = 8; + String monthString; + switch (month) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: monthString = "December"; break; + default: monthString = "Invalid month"; break; + } + System.out.println(monthString); + } +} \ No newline at end of file diff --git a/testData/ast/switch/file/throwDown.kt b/testData/ast/switch/file/throwDown.kt new file mode 100644 index 00000000000..54888aa2e40 --- /dev/null +++ b/testData/ast/switch/file/throwDown.kt @@ -0,0 +1,18 @@ +namespace switch_demo +public open class SwitchDemo() { +class object { +open public fun main(args : Array?) : Unit { +var month : Int = 8 +var monthString : String? +when (month) { +1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 => { +monthString = "December" +} +else => { +monthString = "Invalid month" +} +} +System.out?.println(monthString) +} +} +} \ No newline at end of file