New J2K: Add support of break statements
This commit is contained in:
committed by
Ilya Kirillov
parent
7e2d0695fe
commit
18164b116b
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user