throw down case for empty cases supported

This commit is contained in:
Sergey Ignatov
2011-12-07 16:00:21 +04:00
parent 1287379398
commit dafc510450
4 changed files with 56 additions and 9 deletions
@@ -1,6 +1,7 @@
package org.jetbrains.jet.j2k.ast; package org.jetbrains.jet.j2k.ast;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.util.AstUtil;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -9,10 +10,10 @@ import java.util.List;
* @author ignatov * @author ignatov
*/ */
public class CaseContainer extends Statement { public class CaseContainer extends Statement {
private Statement myCaseStatement; private List<Statement> myCaseStatement;
private Block myBlock; private Block myBlock;
public CaseContainer(final Statement caseStatement, final List<Statement> statements) { public CaseContainer(final List<Statement> caseStatement, final List<Statement> statements) {
myCaseStatement = caseStatement; myCaseStatement = caseStatement;
List<Statement> newStatements = new LinkedList<Statement>(); List<Statement> newStatements = new LinkedList<Statement>();
for (Statement s : statements) for (Statement s : statements)
@@ -24,6 +25,6 @@ public class CaseContainer extends Statement {
@NotNull @NotNull
@Override @Override
public String toKotlin() { public String toKotlin() {
return myCaseStatement.toKotlin() + SPACE + "=>" + SPACE + myBlock.toKotlin(); return AstUtil.joinNodes(myCaseStatement, COMMA_WITH_SPACE) + SPACE + "=>" + SPACE + myBlock.toKotlin();
} }
} }
@@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -210,15 +209,20 @@ public class StatementVisitor extends ElementVisitor {
@NotNull @NotNull
private static List<CaseContainer> listToCases(@NotNull final List<List<PsiStatement>> cases) { private static List<CaseContainer> listToCases(@NotNull final List<List<PsiStatement>> cases) {
List<CaseContainer> result = new LinkedList<CaseContainer>(); List<CaseContainer> result = new LinkedList<CaseContainer>();
List<Statement> pendingLabels = new LinkedList<Statement>();
for (List<PsiStatement> ls : cases) { for (List<PsiStatement> ls : cases) {
assert ls.size() > 0; assert ls.size() > 0;
PsiStatement label = ls.get(0); PsiStatement label = ls.get(0);
assert label instanceof PsiSwitchLabelStatement; assert label instanceof PsiSwitchLabelStatement;
result.add(new CaseContainer(statementToStatement(label), if (ls.size() > 1) {
ls.size() > 1 ? pendingLabels.add(statementToStatement(label));
statementsToStatementList(ls.subList(1, ls.size()).toArray(new PsiStatement[ls.size() - 1])) : result.add(new CaseContainer(pendingLabels,
Collections.<Statement>emptyList() statementsToStatementList(ls.subList(1, ls.size()).toArray(new PsiStatement[ls.size() - 1]))
)); ));
pendingLabels = new LinkedList<Statement>();
}
else // ls.size() == 1
pendingLabels.add(statementToStatement(label));
} }
return result; return result;
} }
+24
View File
@@ -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);
}
}
+18
View File
@@ -0,0 +1,18 @@
namespace switch_demo
public open class SwitchDemo() {
class object {
open public fun main(args : Array<String?>?) : 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)
}
}
}