diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 8240a98b598..0b85b799fbb 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -55,6 +55,9 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { is PsiInstanceOfExpression -> toJK() is PsiThisExpression -> JKThisExpressionImpl() is PsiSuperExpression -> JKSuperExpressionImpl() + is PsiConditionalExpression -> JKIfElseExpressionImpl( + condition.toJK(), JKExpressionStatementImpl(thenExpression.toJK()), JKExpressionStatementImpl(elseExpression.toJK()) + ) else -> { throw RuntimeException("Not supported: ${this::class}") } @@ -300,14 +303,25 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK()) is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() }, with(expressionTreeMapper) { assertDescription.toJK() }) - is PsiIfStatement -> if (elseElement == null) - JKJavaIfStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK()) - else - JKJavaIfElseStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK()) + is PsiIfStatement -> JKExpressionStatementImpl( + if (elseElement == null) + JKIfExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK()) + else + JKIfElseExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK()) + ) is PsiForStatement -> JKJavaForLoopStatementImpl( initialization.toJK(), with(expressionTreeMapper) { condition.toJK() }, update.toJK(), body.toJK() ) is PsiBlockStatement -> JKBlockStatementImpl(codeBlock.toJK()) + is PsiWhileStatement -> JKWhileStatementImpl(with(expressionTreeMapper) { condition.toJK() }, body.toJK()) + is PsiDoWhileStatement -> JKDoWhileStatementImpl(body.toJK(), with(expressionTreeMapper) { condition.toJK() }) + is PsiSwitchStatement -> JKSwitchStatementImpl(with(expressionTreeMapper) { expression.toJK() }, body?.toJK() ?: TODO()) + is PsiSwitchLabelStatement -> if (isDefaultCase) JKSwitchDefaultLabelStatementImpl() else + JKSwitchLabelStatementImpl(with(expressionTreeMapper) { caseValue.toJK() }) + is PsiBreakStatement -> { + labelIdentifier?.also { TODO("Label break") } + JKBreakStatementImpl() + } else -> TODO("for ${this::class}") } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index 6e87bd81b3c..61c5d0741d5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -162,22 +162,6 @@ class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpressi override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaAssertStatement(this, data) } -class JKJavaIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKJavaIfStatement, JKBranchElementBase() { - override var thenBranch by child(thenBranch) - override var condition by child(condition) - - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaIfStatement(this, data) -} - -class JKJavaIfElseStatementImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKJavaIfElseStatement, - JKBranchElementBase() { - override var elseBranch by child(elseBranch) - override var thenBranch by child(thenBranch) - override var condition by child(condition) - - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaIfElseStatement(this, data) -} - class JKJavaForLoopStatementImpl(initializer: JKStatement, condition: JKExpression, updater: JKStatement, body: JKStatement) : JKJavaForLoopStatement, JKBranchElementBase() { override var body by child(body) 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 beec0d8debe..6514217cee1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -208,4 +208,51 @@ class JKThisExpressionImpl : JKThisExpression, JKElementBase() { class JKSuperExpressionImpl : JKSuperExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitSuperExpression(this, data) +} + +class JKWhileStatementImpl(condition: JKExpression, body: JKStatement) : JKWhileStatement, JKBranchElementBase() { + override var condition by child(condition) + override var body by child(body) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitWhileStatement(this, data) +} + +class JKDoWhileStatementImpl(body: JKStatement, condition: JKExpression) : JKDoWhileStatement, JKBranchElementBase() { + override var condition by child(condition) + override var body by child(body) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitDoWhileStatement(this, data) +} + +class JKSwitchStatementImpl(expression: JKExpression, block: JKBlock) : JKSwitchStatement, JKBranchElementBase() { + override var block by child(block) + override var expression by child(expression) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitSwitchStatement(this, data) +} + +class JKSwitchLabelStatementImpl(expression: JKExpression) : JKSwitchLabelStatement, JKBranchElementBase() { + override var expression by child(expression) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitSwitchLabelStatement(this, data) +} + +class JKSwitchDefaultLabelStatementImpl : JKSwitchDefaultLabelStatement, JKElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitSwitchDefaultLabelStatement(this, data) +} + +class JKBreakStatementImpl : JKBreakStatement, JKElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitBreakStatement(this, data) +} + +class JKIfExpressionImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfExpression, JKBranchElementBase() { + override var thenBranch by child(thenBranch) + override var condition by child(condition) + + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitIfExpression(this, data) +} + +class JKIfElseExpressionImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKIfElseExpression, + JKBranchElementBase() { + override var elseBranch by child(elseBranch) + override var thenBranch by child(thenBranch) + override var condition by child(condition) + + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitIfElseExpression(this, data) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 53c4c23d309..5263e6382ce 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -78,15 +78,6 @@ interface JKJavaAssertStatement : JKStatement { val description: JKExpression } -interface JKJavaIfStatement : JKStatement { - var condition: JKExpression - var thenBranch: JKStatement -} - -interface JKJavaIfElseStatement : JKJavaIfStatement { - var elseBranch: JKStatement -} - interface JKJavaForLoopStatement : JKLoopStatement { var initializer: JKStatement var condition: JKExpression diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index a13f5446086..81bb21e1e02 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -167,3 +167,33 @@ interface JKBlockStatement : JKStatement { interface JKThisExpression : JKExpression interface JKSuperExpression : JKExpression + +interface JKWhileStatement : JKLoopStatement { + var condition: JKExpression +} + +interface JKDoWhileStatement : JKLoopStatement { + var condition: JKExpression +} + +interface JKSwitchStatement : JKStatement { + var expression: JKExpression + var block: JKBlock +} + +interface JKSwitchLabelStatement : JKStatement { + var expression: JKExpression +} + +interface JKSwitchDefaultLabelStatement : JKStatement + +interface JKBreakStatement : JKStatement + +interface JKIfExpression : JKExpression { + var condition: JKExpression + var thenBranch: JKStatement +} + +interface JKIfElseExpression : JKIfExpression { + var elseBranch: JKStatement +} \ No newline at end of file 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 f475a359348..10c8e4c22c1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -40,12 +40,21 @@ interface JKVisitor { fun visitBlockStatement(blockStatement: JKBlockStatement, data: D): R = visitStatement(blockStatement, data) fun visitThisExpression(thisExpression: JKThisExpression, data: D): R = visitExpression(thisExpression, data) fun visitSuperExpression(superExpression: JKSuperExpression, data: D): R = visitExpression(superExpression, data) + fun visitWhileStatement(whileStatement: JKWhileStatement, data: D): R = visitLoopStatement(whileStatement, data) + fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement, data: D): R = visitLoopStatement(doWhileStatement, data) + fun visitSwitchStatement(switchStatement: JKSwitchStatement, data: D): R = visitStatement(switchStatement, data) + 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 visitIfExpression(ifExpression: JKIfExpression, data: D): R = visitExpression(ifExpression, data) + fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: D): R = visitIfExpression(ifElseExpression, data) fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data) fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data) fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data) fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data) fun visitJavaFieldAccessExpression(javaFieldAccessExpression: JKJavaFieldAccessExpression, data: D): R = visitFieldAccessExpression(javaFieldAccessExpression, data) fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: D): R = visitExpression(javaNewExpression, data) + fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: D): R = visitExpression(javaDefaultNewExpression, data) fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: D): R = visitAccessModifier(javaAccessModifier, data) fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data) fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data) @@ -53,8 +62,6 @@ interface JKVisitor { fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: D): R = visitLiteralExpression(javaLiteralExpression, data) fun visitReturnStatement(returnStatement: JKReturnStatement, data: D): R = visitStatement(returnStatement, data) fun visitJavaAssertStatement(javaAssertStatement: JKJavaAssertStatement, data: D): R = visitStatement(javaAssertStatement, data) - fun visitJavaIfStatement(javaIfStatement: JKJavaIfStatement, data: D): R = visitStatement(javaIfStatement, data) - fun visitJavaIfElseStatement(javaIfElseStatement: JKJavaIfElseStatement, data: D): R = visitJavaIfStatement(javaIfElseStatement, data) fun visitJavaForLoopStatement(javaForLoopStatement: JKJavaForLoopStatement, data: D): R = visitLoopStatement(javaForLoopStatement, data) fun visitJavaInstanceOfExpression(javaInstanceOfExpression: JKJavaInstanceOfExpression, data: D): R = visitExpression(javaInstanceOfExpression, data) fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, 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 39308b9a0a8..3798b1f9ec1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -77,6 +77,22 @@ interface JKVisitorVoid : JKVisitor { override fun visitThisExpression(thisExpression: JKThisExpression, data: Nothing?) = visitThisExpression(thisExpression) fun visitSuperExpression(superExpression: JKSuperExpression) = visitExpression(superExpression, null) override fun visitSuperExpression(superExpression: JKSuperExpression, data: Nothing?) = visitSuperExpression(superExpression) + fun visitWhileStatement(whileStatement: JKWhileStatement) = visitLoopStatement(whileStatement, null) + override fun visitWhileStatement(whileStatement: JKWhileStatement, data: Nothing?) = visitWhileStatement(whileStatement) + fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement) = visitLoopStatement(doWhileStatement, null) + override fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement, data: Nothing?) = visitDoWhileStatement(doWhileStatement) + fun visitSwitchStatement(switchStatement: JKSwitchStatement) = visitStatement(switchStatement, null) + override fun visitSwitchStatement(switchStatement: JKSwitchStatement, data: Nothing?) = visitSwitchStatement(switchStatement) + fun visitSwitchLabelStatement(switchLabelStatement: JKSwitchLabelStatement) = visitStatement(switchLabelStatement, null) + override fun visitSwitchLabelStatement(switchLabelStatement: JKSwitchLabelStatement, data: Nothing?) = visitSwitchLabelStatement(switchLabelStatement) + fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement) = visitStatement(switchDefaultLabelStatement, null) + 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 visitIfExpression(ifExpression: JKIfExpression) = visitExpression(ifExpression, null) + override fun visitIfExpression(ifExpression: JKIfExpression, data: Nothing?) = visitIfExpression(ifExpression) + fun visitIfElseExpression(ifElseExpression: JKIfElseExpression) = visitIfExpression(ifElseExpression, null) + override fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: Nothing?) = visitIfElseExpression(ifElseExpression) fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null) override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null) @@ -89,6 +105,8 @@ interface JKVisitorVoid : JKVisitor { override fun visitJavaFieldAccessExpression(javaFieldAccessExpression: JKJavaFieldAccessExpression, data: Nothing?) = visitJavaFieldAccessExpression(javaFieldAccessExpression) fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) = visitExpression(javaNewExpression, null) override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: Nothing?) = visitJavaNewExpression(javaNewExpression) + fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression) = visitExpression(javaDefaultNewExpression, null) + override fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: Nothing?) = visitJavaDefaultNewExpression(javaDefaultNewExpression) fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null) override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?) = visitJavaAccessModifier(javaAccessModifier) fun visitJavaModifier(javaModifier: JKJavaModifier) = visitModifier(javaModifier, null) @@ -103,10 +121,6 @@ interface JKVisitorVoid : JKVisitor { override fun visitReturnStatement(returnStatement: JKReturnStatement, data: Nothing?) = visitReturnStatement(returnStatement) fun visitJavaAssertStatement(javaAssertStatement: JKJavaAssertStatement) = visitStatement(javaAssertStatement, null) override fun visitJavaAssertStatement(javaAssertStatement: JKJavaAssertStatement, data: Nothing?) = visitJavaAssertStatement(javaAssertStatement) - fun visitJavaIfStatement(javaIfStatement: JKJavaIfStatement) = visitStatement(javaIfStatement, null) - override fun visitJavaIfStatement(javaIfStatement: JKJavaIfStatement, data: Nothing?) = visitJavaIfStatement(javaIfStatement) - fun visitJavaIfElseStatement(javaIfElseStatement: JKJavaIfElseStatement) = visitJavaIfStatement(javaIfElseStatement, null) - override fun visitJavaIfElseStatement(javaIfElseStatement: JKJavaIfElseStatement, data: Nothing?) = visitJavaIfElseStatement(javaIfElseStatement) fun visitJavaForLoopStatement(javaForLoopStatement: JKJavaForLoopStatement) = visitLoopStatement(javaForLoopStatement, null) override fun visitJavaForLoopStatement(javaForLoopStatement: JKJavaForLoopStatement, data: Nothing?) = visitJavaForLoopStatement(javaForLoopStatement) fun visitJavaInstanceOfExpression(javaInstanceOfExpression: JKJavaInstanceOfExpression) = visitExpression(javaInstanceOfExpression, null)