diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt index e73701cb4ce..5f9eab3e66b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt @@ -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()) } } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index d6acc1b0d3c..e7af5fdd32b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -129,15 +129,17 @@ interface JKDeclarationStatement : JKStatement { val declaredStatements: List } -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 diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index de39608f80e..32eaec6cbe7 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -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)