From 18164b116b2e840b2eb8bfc691e5332875ba5e6a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 1 Oct 2018 13:39:59 +0300 Subject: [PATCH] New J2K: Add support of break statements --- .../org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt | 6 ++++-- j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt | 9 +++++++++ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 4 ++++ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt | 4 ++++ .../org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt | 1 + .../jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt | 2 ++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 4b975b4b7ef..73b194a3d6f 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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}") } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 044bd95d29f..34c33ce2244 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -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) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index b3e2ed3eb2d..e4c1a47cd22 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -291,6 +291,10 @@ class JKBreakStatementImpl : JKBreakStatement, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitBreakStatement(this, data) } +class JKBreakWithLabelStatementImpl(override var label: JKNameIdentifier) : JKBreakWithLabelStatement, JKElementBase() { + override fun accept(visitor: JKVisitor, 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index cf2156fcbbd..5af837e4955 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -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 diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index e7a26903899..e73fb006d44 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -50,6 +50,7 @@ interface JKVisitor { 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 487e8646acf..9b2ddeaaf46 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -97,6 +97,8 @@ interface JKVisitorVoid : JKVisitor { 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)