New J2K: Inherit JKBinaryExpression & JKUnaryExpression from JKOperatorExpression
This commit is contained in:
committed by
Ilya Kirillov
parent
9374816823
commit
f76a3504cc
@@ -16,16 +16,9 @@ import org.jetbrains.kotlin.j2k.tree.impl.toKtToken
|
||||
|
||||
class OperatorExpressionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
if (element !is JKOperatorExpression) return recurse(element)
|
||||
val operatorToken =
|
||||
((when (element) {
|
||||
is JKBinaryExpression ->
|
||||
element.operator
|
||||
is JKPrefixExpression ->
|
||||
element.operator
|
||||
is JKPostfixExpression ->
|
||||
element.operator
|
||||
else -> null
|
||||
} as? JKJavaOperatorImpl)?.token)?.toKtToken() ?: return recurse(element)
|
||||
(element.operator as? JKJavaOperatorImpl)?.token?.toKtToken() ?: return recurse(element)
|
||||
|
||||
return when (element) {
|
||||
is JKBinaryExpression -> {
|
||||
@@ -41,7 +34,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec
|
||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||
recurse(kotlinPostfixExpression(operand, operatorToken, context))
|
||||
}
|
||||
else -> recurse(element)
|
||||
else -> TODO(element.javaClass.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -129,15 +129,17 @@ interface JKDeclarationStatement : JKStatement {
|
||||
val declaredStatements: List<JKDeclaration>
|
||||
}
|
||||
|
||||
interface JKBinaryExpression : JKExpression {
|
||||
var left: JKExpression
|
||||
var right: JKExpression
|
||||
interface JKOperatorExpression : JKExpression {
|
||||
var operator: JKOperator
|
||||
}
|
||||
|
||||
interface JKUnaryExpression : JKExpression {
|
||||
interface JKBinaryExpression : JKOperatorExpression {
|
||||
var left: JKExpression
|
||||
var right: JKExpression
|
||||
}
|
||||
|
||||
interface JKUnaryExpression : JKOperatorExpression {
|
||||
var expression: JKExpression
|
||||
var operator: JKOperator
|
||||
}
|
||||
|
||||
interface JKPrefixExpression : JKUnaryExpression
|
||||
|
||||
@@ -28,16 +28,15 @@ import org.jetbrains.kotlin.j2k.kotlinTypeByName
|
||||
fun JKExpression.type(context: ConversionContext): JKType =
|
||||
when (this) {
|
||||
is JKLiteralExpression -> type.toJkType(context.symbolProvider)
|
||||
is JKBinaryExpression -> {
|
||||
is JKOperatorExpression -> {
|
||||
if (operator !is JKKtOperatorImpl) {
|
||||
error("Cannot get type of ${operator::class}, it should be first converted to KtOperator")
|
||||
}
|
||||
val operatorSymbol = (operator as JKKtOperatorImpl).methodSymbol
|
||||
if (operatorSymbol.name == "compareTo") {
|
||||
kotlinTypeByName("kotlin.Boolean", context.symbolProvider)
|
||||
} else operatorSymbol.returnType
|
||||
}
|
||||
is JKPostfixExpressionImpl ->
|
||||
(operator as JKKtOperatorImpl).methodSymbol.returnType
|
||||
is JKPrefixExpression ->
|
||||
(operator as JKKtOperatorImpl).methodSymbol.returnType
|
||||
is JKMethodCallExpression -> identifier.returnType
|
||||
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||
|
||||
Reference in New Issue
Block a user