New J2K: Add throw statement
This commit is contained in:
committed by
Ilya Kirillov
parent
66f12d9fea
commit
594d0ba7e9
@@ -24,6 +24,7 @@ object ConversionsRunner {
|
||||
private fun createRootConversion(context: ConversionContext) =
|
||||
batchPipe {
|
||||
+BinaryExpressionConversion(context)
|
||||
+ThrowStatementConversion()
|
||||
+ArrayInitializerConversion(context)
|
||||
+ModalityConversion(context)
|
||||
+ImplicitInitializerConversion()
|
||||
|
||||
@@ -380,6 +380,8 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
JKLabeledStatementImpl(statement.toJK(), labels.map { JKNameIdentifierImpl(it.text) })
|
||||
}
|
||||
is PsiEmptyStatement -> JKEmptyStatementImpl()
|
||||
is PsiThrowStatement ->
|
||||
JKJavaThrowStatementImpl(with(expressionTreeMapper) { exception.toJK() })
|
||||
else -> TODO("for ${this::class}")
|
||||
}.also {
|
||||
if (this != null) (it as PsiOwner).psi = this
|
||||
|
||||
@@ -54,6 +54,11 @@ class NewCodeBuilder {
|
||||
ktForInStatement.body.accept(this)
|
||||
}
|
||||
|
||||
override fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression) {
|
||||
printer.printlnWithNoIndent("throw ")
|
||||
ktThrowExpression.exception.accept(this)
|
||||
}
|
||||
|
||||
override fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement) {
|
||||
printer.printWithNoIndent("do")
|
||||
doWhileStatement.body.accept(this)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.j2k.conversions
|
||||
|
||||
import org.jetbrains.kotlin.j2k.tree.JKExpressionStatement
|
||||
import org.jetbrains.kotlin.j2k.tree.JKJavaThrowStatement
|
||||
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||
import org.jetbrains.kotlin.j2k.tree.detached
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKExpressionStatementImpl
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKKtThrowExpressionImpl
|
||||
|
||||
|
||||
class ThrowStatementConversion : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
if (element !is JKJavaThrowStatement) return recurse(element)
|
||||
val throwExpression = JKKtThrowExpressionImpl(element::exception.detached())
|
||||
return recurse(JKExpressionStatementImpl(throwExpression))
|
||||
}
|
||||
}
|
||||
@@ -306,3 +306,8 @@ class JKJavaLabelSwitchCaseImpl(
|
||||
override var label: JKExpression by child(label)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLabelSwitchCase(this, data)
|
||||
}
|
||||
|
||||
class JKJavaThrowStatementImpl(exception: JKExpression) : JKJavaThrowStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override var exception: JKExpression by child(exception)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaThrowStatement(this, data)
|
||||
}
|
||||
@@ -261,3 +261,8 @@ class JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R =
|
||||
visitor.visitKtConvertedFromForLoopSyntheticWhileStatement(this, data)
|
||||
}
|
||||
|
||||
class JKKtThrowExpressionImpl(exception: JKExpression) : JKKtThrowExpression, JKBranchElementBase() {
|
||||
override var exception: JKExpression by child(exception)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtThrowExpression(this, data)
|
||||
}
|
||||
@@ -88,6 +88,11 @@ interface JKJavaAssignmentExpression : JKExpression, JKBranchElement {
|
||||
var operator: JKOperator
|
||||
}
|
||||
|
||||
|
||||
interface JKJavaThrowStatement : JKStatement {
|
||||
var exception: JKExpression
|
||||
}
|
||||
|
||||
interface JKJavaSwitchStatement : JKStatement {
|
||||
var expression: JKExpression
|
||||
var cases: List<JKJavaSwitchCase>
|
||||
|
||||
@@ -93,4 +93,9 @@ interface JKKtOperatorExpression : JKExpression {
|
||||
interface JKKtConvertedFromForLoopSyntheticWhileStatement : JKStatement {
|
||||
var variableDeclaration: JKStatement
|
||||
var whileStatement: JKWhileStatement
|
||||
}
|
||||
|
||||
|
||||
interface JKKtThrowExpression : JKExpression {
|
||||
var exception: JKExpression
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.util.reverse
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||
@@ -36,6 +37,7 @@ fun JKExpression.type(context: ConversionContext): JKType =
|
||||
is JKMethodCallExpression -> identifier.returnType
|
||||
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitJavaInstanceOfExpression(javaInstanceOfExpression: JKJavaInstanceOfExpression, data: D): R = visitExpression(javaInstanceOfExpression, data)
|
||||
fun visitJavaPolyadicExpression(javaPolyadicExpression: JKJavaPolyadicExpression, data: D): R = visitExpression(javaPolyadicExpression, data)
|
||||
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data)
|
||||
fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: D): R = visitStatement(javaThrowStatement, data)
|
||||
fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: D): R = visitStatement(javaContinueStatement, data)
|
||||
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: D): R = visitStatement(javaSwitchStatement, data)
|
||||
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase, data: D): R = visitTreeElement(javaSwitchCase, data)
|
||||
@@ -100,4 +101,5 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitKtForInStatement(ktForInStatement: JKKtForInStatement, data: D): R = visitStatement(ktForInStatement, data)
|
||||
fun visitKtOperatorExpression(ktOperatorExpression: JKKtOperatorExpression, data: D): R = visitExpression(ktOperatorExpression, data)
|
||||
fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement, data: D): R = visitStatement(ktConvertedFromForLoopSyntheticWhileStatement, data)
|
||||
fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression, data: D): R = visitExpression(ktThrowExpression, data)
|
||||
}
|
||||
|
||||
@@ -147,6 +147,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitJavaPolyadicExpression(javaPolyadicExpression: JKJavaPolyadicExpression, data: Nothing?) = visitJavaPolyadicExpression(javaPolyadicExpression)
|
||||
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression) = visitExpression(javaAssignmentExpression, null)
|
||||
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression)
|
||||
fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement) = visitStatement(javaThrowStatement, null)
|
||||
override fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: Nothing?) = visitJavaThrowStatement(javaThrowStatement)
|
||||
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement) = visitStatement(javaSwitchStatement, null)
|
||||
override fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: Nothing?) = visitJavaSwitchStatement(javaSwitchStatement)
|
||||
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase) = visitTreeElement(javaSwitchCase, null)
|
||||
@@ -197,4 +199,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitKtOperatorExpression(ktOperatorExpression: JKKtOperatorExpression, data: Nothing?) = visitKtOperatorExpression(ktOperatorExpression)
|
||||
fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement) = visitStatement(ktConvertedFromForLoopSyntheticWhileStatement, null)
|
||||
override fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement, data: Nothing?) = visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement)
|
||||
fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression) = visitExpression(ktThrowExpression, null)
|
||||
override fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression, data: Nothing?) = visitKtThrowExpression(ktThrowExpression)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user