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;
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<Statement> myCaseStatement;
private Block myBlock;
public CaseContainer(final Statement caseStatement, final List<Statement> statements) {
public CaseContainer(final List<Statement> caseStatement, final List<Statement> statements) {
myCaseStatement = caseStatement;
List<Statement> newStatements = new LinkedList<Statement>();
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();
}
}
@@ -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<CaseContainer> listToCases(@NotNull final List<List<PsiStatement>> cases) {
List<CaseContainer> result = new LinkedList<CaseContainer>();
List<Statement> pendingLabels = new LinkedList<Statement>();
for (List<PsiStatement> 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.<Statement>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<Statement>();
}
else // ls.size() == 1
pendingLabels.add(statementToStatement(label));
}
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)
}
}
}