Fixed switch statement
This commit is contained in:
@@ -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?>?)
|
||||
Reference in New Issue
Block a user