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) =
|
private fun createRootConversion(context: ConversionContext) =
|
||||||
batchPipe {
|
batchPipe {
|
||||||
+BinaryExpressionConversion(context)
|
+BinaryExpressionConversion(context)
|
||||||
|
+ThrowStatementConversion()
|
||||||
+ArrayInitializerConversion(context)
|
+ArrayInitializerConversion(context)
|
||||||
+ModalityConversion(context)
|
+ModalityConversion(context)
|
||||||
+ImplicitInitializerConversion()
|
+ImplicitInitializerConversion()
|
||||||
|
|||||||
@@ -380,6 +380,8 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
JKLabeledStatementImpl(statement.toJK(), labels.map { JKNameIdentifierImpl(it.text) })
|
JKLabeledStatementImpl(statement.toJK(), labels.map { JKNameIdentifierImpl(it.text) })
|
||||||
}
|
}
|
||||||
is PsiEmptyStatement -> JKEmptyStatementImpl()
|
is PsiEmptyStatement -> JKEmptyStatementImpl()
|
||||||
|
is PsiThrowStatement ->
|
||||||
|
JKJavaThrowStatementImpl(with(expressionTreeMapper) { exception.toJK() })
|
||||||
else -> TODO("for ${this::class}")
|
else -> TODO("for ${this::class}")
|
||||||
}.also {
|
}.also {
|
||||||
if (this != null) (it as PsiOwner).psi = this
|
if (this != null) (it as PsiOwner).psi = this
|
||||||
|
|||||||
@@ -54,6 +54,11 @@ class NewCodeBuilder {
|
|||||||
ktForInStatement.body.accept(this)
|
ktForInStatement.body.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression) {
|
||||||
|
printer.printlnWithNoIndent("throw ")
|
||||||
|
ktThrowExpression.exception.accept(this)
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement) {
|
override fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement) {
|
||||||
printer.printWithNoIndent("do")
|
printer.printWithNoIndent("do")
|
||||||
doWhileStatement.body.accept(this)
|
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 var label: JKExpression by child(label)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLabelSwitchCase(this, data)
|
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 =
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R =
|
||||||
visitor.visitKtConvertedFromForLoopSyntheticWhileStatement(this, data)
|
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
|
var operator: JKOperator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interface JKJavaThrowStatement : JKStatement {
|
||||||
|
var exception: JKExpression
|
||||||
|
}
|
||||||
|
|
||||||
interface JKJavaSwitchStatement : JKStatement {
|
interface JKJavaSwitchStatement : JKStatement {
|
||||||
var expression: JKExpression
|
var expression: JKExpression
|
||||||
var cases: List<JKJavaSwitchCase>
|
var cases: List<JKJavaSwitchCase>
|
||||||
|
|||||||
@@ -93,4 +93,9 @@ interface JKKtOperatorExpression : JKExpression {
|
|||||||
interface JKKtConvertedFromForLoopSyntheticWhileStatement : JKStatement {
|
interface JKKtConvertedFromForLoopSyntheticWhileStatement : JKStatement {
|
||||||
var variableDeclaration: JKStatement
|
var variableDeclaration: JKStatement
|
||||||
var whileStatement: JKWhileStatement
|
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.psi.*
|
||||||
import com.intellij.util.reverse
|
import com.intellij.util.reverse
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.j2k.ConversionContext
|
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||||
@@ -36,6 +37,7 @@ fun JKExpression.type(context: ConversionContext): JKType =
|
|||||||
is JKMethodCallExpression -> identifier.returnType
|
is JKMethodCallExpression -> identifier.returnType
|
||||||
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
||||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||||
|
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
||||||
else -> TODO(this::class.java.toString())
|
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 visitJavaInstanceOfExpression(javaInstanceOfExpression: JKJavaInstanceOfExpression, data: D): R = visitExpression(javaInstanceOfExpression, data)
|
||||||
fun visitJavaPolyadicExpression(javaPolyadicExpression: JKJavaPolyadicExpression, data: D): R = visitExpression(javaPolyadicExpression, data)
|
fun visitJavaPolyadicExpression(javaPolyadicExpression: JKJavaPolyadicExpression, data: D): R = visitExpression(javaPolyadicExpression, data)
|
||||||
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, 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 visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: D): R = visitStatement(javaContinueStatement, data)
|
||||||
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: D): R = visitStatement(javaSwitchStatement, data)
|
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: D): R = visitStatement(javaSwitchStatement, data)
|
||||||
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase, data: D): R = visitTreeElement(javaSwitchCase, 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 visitKtForInStatement(ktForInStatement: JKKtForInStatement, data: D): R = visitStatement(ktForInStatement, data)
|
||||||
fun visitKtOperatorExpression(ktOperatorExpression: JKKtOperatorExpression, data: D): R = visitExpression(ktOperatorExpression, data)
|
fun visitKtOperatorExpression(ktOperatorExpression: JKKtOperatorExpression, data: D): R = visitExpression(ktOperatorExpression, data)
|
||||||
fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement, data: D): R = visitStatement(ktConvertedFromForLoopSyntheticWhileStatement, 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)
|
override fun visitJavaPolyadicExpression(javaPolyadicExpression: JKJavaPolyadicExpression, data: Nothing?) = visitJavaPolyadicExpression(javaPolyadicExpression)
|
||||||
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression) = visitExpression(javaAssignmentExpression, null)
|
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression) = visitExpression(javaAssignmentExpression, null)
|
||||||
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression)
|
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)
|
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement) = visitStatement(javaSwitchStatement, null)
|
||||||
override fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: Nothing?) = visitJavaSwitchStatement(javaSwitchStatement)
|
override fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: Nothing?) = visitJavaSwitchStatement(javaSwitchStatement)
|
||||||
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase) = visitTreeElement(javaSwitchCase, null)
|
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)
|
override fun visitKtOperatorExpression(ktOperatorExpression: JKKtOperatorExpression, data: Nothing?) = visitKtOperatorExpression(ktOperatorExpression)
|
||||||
fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement) = visitStatement(ktConvertedFromForLoopSyntheticWhileStatement, null)
|
fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement) = visitStatement(ktConvertedFromForLoopSyntheticWhileStatement, null)
|
||||||
override fun visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement, data: Nothing?) = visitKtConvertedFromForLoopSyntheticWhileStatement(ktConvertedFromForLoopSyntheticWhileStatement)
|
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