New J2K: Add support of break statements

This commit is contained in:
Ilya Kirillov
2018-10-01 13:39:59 +03:00
committed by Ilya Kirillov
parent 7e2d0695fe
commit 18164b116b
6 changed files with 24 additions and 2 deletions
@@ -366,8 +366,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
is PsiSwitchLabelStatement -> if (isDefaultCase) JKSwitchDefaultLabelStatementImpl() else
JKSwitchLabelStatementImpl(with(expressionTreeMapper) { caseValue.toJK() })
is PsiBreakStatement -> {
//labelIdentifier?.also { TODO("Label break") }
JKBreakStatementImpl()
if (labelIdentifier != null)
JKBreakWithLabelStatementImpl(JKNameIdentifierImpl(labelIdentifier!!.text))
else
JKBreakStatementImpl()
}
else -> TODO("for ${this::class}")
}
@@ -49,6 +49,15 @@ class NewCodeBuilder {
file.acceptChildren(this)
}
override fun visitBreakStatement(breakStatement: JKBreakStatement) {
printer.printWithNoIndent("break")
}
override fun visitBreakWithLabelStatement(ktBreakWithLabelStatement: JKBreakWithLabelStatement) {
printer.printWithNoIndent("break@")
printer.printWithNoIndent(ktBreakWithLabelStatement.label.value)
}
override fun visitModifierList(modifierList: JKModifierList) {
modifierList.modifiers.firstOrNull()?.accept(this)
for (i in 1..modifierList.modifiers.lastIndex) {
@@ -291,6 +291,10 @@ class JKBreakStatementImpl : JKBreakStatement, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakStatement(this, data)
}
class JKBreakWithLabelStatementImpl(override var label: JKNameIdentifier) : JKBreakWithLabelStatement, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakWithLabelStatement(this, data)
}
class JKIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfStatement, JKBranchElementBase() {
override var thenBranch by child(thenBranch)
override var condition by child(condition)
@@ -227,6 +227,10 @@ interface JKSwitchDefaultLabelStatement : JKStatement
interface JKBreakStatement : JKStatement
interface JKBreakWithLabelStatement : JKBreakStatement {
var label: JKNameIdentifier
}
interface JKIfStatement : JKStatement {
var condition: JKExpression
var thenBranch: JKStatement
@@ -50,6 +50,7 @@ interface JKVisitor<out R, in D> {
fun visitSwitchLabelStatement(switchLabelStatement: JKSwitchLabelStatement, data: D): R = visitStatement(switchLabelStatement, data)
fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: D): R = visitStatement(switchDefaultLabelStatement, data)
fun visitBreakStatement(breakStatement: JKBreakStatement, data: D): R = visitStatement(breakStatement, data)
fun visitBreakWithLabelStatement(breakWithLabelStatement: JKBreakWithLabelStatement, data: D): R = visitBreakStatement(breakWithLabelStatement, data)
fun visitIfStatement(ifStatement: JKIfStatement, data: D): R = visitStatement(ifStatement, data)
fun visitIfElseStatement(ifElseStatement: JKIfElseStatement, data: D): R = visitIfStatement(ifElseStatement, data)
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: D): R = visitExpression(ifElseExpression, data)
@@ -97,6 +97,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: Nothing?) = visitSwitchDefaultLabelStatement(switchDefaultLabelStatement)
fun visitBreakStatement(breakStatement: JKBreakStatement) = visitStatement(breakStatement, null)
override fun visitBreakStatement(breakStatement: JKBreakStatement, data: Nothing?) = visitBreakStatement(breakStatement)
fun visitBreakWithLabelStatement(ktBreakWithLabelStatement: JKBreakWithLabelStatement) = visitBreakStatement(ktBreakWithLabelStatement, null)
override fun visitBreakWithLabelStatement(breakWithLabelStatement: JKBreakWithLabelStatement, data: Nothing?) = visitBreakWithLabelStatement(breakWithLabelStatement)
fun visitIfStatement(ifStatement: JKIfStatement) = visitStatement(ifStatement, null)
override fun visitIfStatement(ifStatement: JKIfStatement, data: Nothing?) = visitIfStatement(ifStatement)
fun visitIfElseStatement(ifElseStatement: JKIfElseStatement) = visitIfStatement(ifElseStatement, null)