Fixed switch statement

This commit is contained in:
Hozum
2013-03-22 01:24:44 +09:00
committed by Pavel V. Talanov
parent 7ae18fc94c
commit f6d367b7d0
6 changed files with 86 additions and 20 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ public open class CaseContainer(val caseStatement: List<Element>, statements: Li
{
val newStatements = statements.filterNot { it is BreakStatement || it is ContinueStatement }
myBlock = Block(newStatements, false)
myBlock = Block(newStatements, true)
}
public override fun toKotlin() = caseStatement.toKotlin(", ") + " -> " + myBlock.toKotlin()
@@ -158,31 +158,37 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
val result = ArrayList<CaseContainer>()
var pendingLabels = ArrayList<Element>()
var i: Int = 0
var hasDefaultCase: Boolean = false
for (ls in cases) {
// TODO assert {(ls?.size()).sure() > 0}
var label = ls[0]
// TODO assert {(label is PsiSwitchLabelStatement?)}
// TODO assert("not a right index") {allSwitchStatements?.get(i) == label}
if (ls.size() > 1) {
pendingLabels.add(getConverter().statementToStatement(label))
val slice: List<PsiElement> = ls.subList(1, (ls.size()))
if (!containsBreak(slice)) {
val statements = ArrayList(getConverter().statementsToStatementList(slice))
statements.addAll(getConverter().statementsToStatementList(getAllToNextBreak(allSwitchStatements, i + ls.size())))
result.add(CaseContainer(pendingLabels, statements))
pendingLabels = arrayList()
if (ls.size() > 0) {
var label = ls[0]
hasDefaultCase = hasDefaultCase || (label as PsiSwitchLabelStatement).isDefaultCase()
// TODO assert {(label is PsiSwitchLabelStatement?)}
// TODO assert("not a right index") {allSwitchStatements?.get(i) == label}
if (ls.size() > 1) {
pendingLabels.add(getConverter().statementToStatement(label))
val slice: List<PsiElement> = ls.subList(1, (ls.size()))
if (!containsBreak(slice)) {
val statements = ArrayList(getConverter().statementsToStatementList(slice))
statements.addAll(getConverter().statementsToStatementList(getAllToNextBreak(allSwitchStatements, i + ls.size())))
result.add(CaseContainer(pendingLabels, statements))
pendingLabels = ArrayList()
}
else {
result.add(CaseContainer(pendingLabels, getConverter().statementsToStatementList(slice)))
pendingLabels = ArrayList()
}
}
else {
result.add(CaseContainer(pendingLabels, getConverter().statementsToStatementList(slice)))
pendingLabels = arrayList()
pendingLabels.add(getConverter().statementToStatement(label))
}
i += ls.size()
}
else {
pendingLabels.add(getConverter().statementToStatement(label))
}
i += ls.size()
}
return result
if (!hasDefaultCase)
result.add(CaseContainer(listOf(DefaultSwitchLabelStatement()), ArrayList()))
return result
}
public override fun visitSynchronizedStatement(statement: PsiSynchronizedStatement?): Unit {
@@ -262,7 +268,7 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
}
else {
cases.add(currentCaseStatements)
currentCaseStatements = arrayList()
currentCaseStatements = ArrayList()
}
}
@@ -0,0 +1,10 @@
public class NonDefault {
public static void main(String[] args) {
int value = 3;
String valueString = "";
switch (value) {
}
System.out.println(valueString);
}
}
@@ -0,0 +1,14 @@
public open class NonDefault() {
class object {
public open fun main(args : Array<String?>?) : Unit {
var value : Int = 3
var valueString : String? = ""
when (value) {
else -> {
}
}
System.out?.println(valueString)
}
}
}
fun main(args : Array<String>) = NonDefault.main(args as Array<String?>?)
@@ -0,0 +1,13 @@
public class NonDefault {
public static void main(String[] args) {
int value = 3;
String valueString = "";
switch (value) {
case 1: valueString = "ONE"; break;
case 2: valueString = "TWO"; break;
case 3: valueString = "THREE"; break;
}
System.out.println(valueString);
}
}
@@ -0,0 +1,23 @@
public open class NonDefault() {
class object {
public open fun main(args : Array<String?>?) : Unit {
var value : Int = 3
var valueString : String? = ""
when (value) {
1 -> {
valueString = "ONE"
}
2 -> {
valueString = "TWO"
}
3 -> {
valueString = "THREE"
}
else -> {
}
}
System.out?.println(valueString)
}
}
}
fun main(args : Array<String>) = NonDefault.main(args as Array<String?>?)