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() {
|
class OperatorExpressionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
|
if (element !is JKOperatorExpression) return recurse(element)
|
||||||
val operatorToken =
|
val operatorToken =
|
||||||
((when (element) {
|
(element.operator as? JKJavaOperatorImpl)?.token?.toKtToken() ?: return recurse(element)
|
||||||
is JKBinaryExpression ->
|
|
||||||
element.operator
|
|
||||||
is JKPrefixExpression ->
|
|
||||||
element.operator
|
|
||||||
is JKPostfixExpression ->
|
|
||||||
element.operator
|
|
||||||
else -> null
|
|
||||||
} as? JKJavaOperatorImpl)?.token)?.toKtToken() ?: return recurse(element)
|
|
||||||
|
|
||||||
return when (element) {
|
return when (element) {
|
||||||
is JKBinaryExpression -> {
|
is JKBinaryExpression -> {
|
||||||
@@ -41,7 +34,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec
|
|||||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||||
recurse(kotlinPostfixExpression(operand, operatorToken, context))
|
recurse(kotlinPostfixExpression(operand, operatorToken, context))
|
||||||
}
|
}
|
||||||
else -> recurse(element)
|
else -> TODO(element.javaClass.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,15 +129,17 @@ interface JKDeclarationStatement : JKStatement {
|
|||||||
val declaredStatements: List<JKDeclaration>
|
val declaredStatements: List<JKDeclaration>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKBinaryExpression : JKExpression {
|
interface JKOperatorExpression : JKExpression {
|
||||||
var left: JKExpression
|
|
||||||
var right: JKExpression
|
|
||||||
var operator: JKOperator
|
var operator: JKOperator
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKUnaryExpression : JKExpression {
|
interface JKBinaryExpression : JKOperatorExpression {
|
||||||
|
var left: JKExpression
|
||||||
|
var right: JKExpression
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JKUnaryExpression : JKOperatorExpression {
|
||||||
var expression: JKExpression
|
var expression: JKExpression
|
||||||
var operator: JKOperator
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKPrefixExpression : JKUnaryExpression
|
interface JKPrefixExpression : JKUnaryExpression
|
||||||
|
|||||||
@@ -28,16 +28,15 @@ import org.jetbrains.kotlin.j2k.kotlinTypeByName
|
|||||||
fun JKExpression.type(context: ConversionContext): JKType =
|
fun JKExpression.type(context: ConversionContext): JKType =
|
||||||
when (this) {
|
when (this) {
|
||||||
is JKLiteralExpression -> type.toJkType(context.symbolProvider)
|
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
|
val operatorSymbol = (operator as JKKtOperatorImpl).methodSymbol
|
||||||
if (operatorSymbol.name == "compareTo") {
|
if (operatorSymbol.name == "compareTo") {
|
||||||
kotlinTypeByName("kotlin.Boolean", context.symbolProvider)
|
kotlinTypeByName("kotlin.Boolean", context.symbolProvider)
|
||||||
} else operatorSymbol.returnType
|
} else operatorSymbol.returnType
|
||||||
}
|
}
|
||||||
is JKPostfixExpressionImpl ->
|
|
||||||
(operator as JKKtOperatorImpl).methodSymbol.returnType
|
|
||||||
is JKPrefixExpression ->
|
|
||||||
(operator as JKKtOperatorImpl).methodSymbol.returnType
|
|
||||||
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user