diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt index 5f9eab3e66b..c5f2016295d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/OperatorExpressionConversion.kt @@ -24,17 +24,17 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec is JKBinaryExpression -> { val left = applyToElement(element::left.detached()) as JKExpression val right = applyToElement(element::right.detached()) as JKExpression - recurse(kotlinBinaryExpression(left, right, operatorToken, context)!!) + kotlinBinaryExpression(left, right, operatorToken, context)?.let { recurse(it) } } is JKPrefixExpression -> { val operand = applyToElement(element::expression.detached()) as JKExpression - recurse(kotlinPrefixExpression(operand, operatorToken, context)) + kotlinPrefixExpression(operand, operatorToken, context)?.let { recurse(it) } } is JKPostfixExpression -> { val operand = applyToElement(element::expression.detached()) as JKExpression - recurse(kotlinPostfixExpression(operand, operatorToken, context)) + kotlinPostfixExpression(operand, operatorToken, context)?.let { recurse(it) } } else -> TODO(element.javaClass.toString()) - } + } ?: recurse(element) } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt index 0715697ebb6..f0e86a5ed9b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt @@ -79,8 +79,8 @@ fun kotlinBinaryExpression( token: JKKtOperatorToken, context: ConversionContext ): JKBinaryExpression? { - val leftType = left.type(context) - val rightType = right.type(context) + val leftType = left.type(context) ?: return null + val rightType = right.type(context) ?: return null val methodSymbol = token.binaryExpressionMethodSymbol(leftType, rightType, context.symbolProvider) return JKBinaryExpressionImpl(left, right, JKKtOperatorImpl(token, methodSymbol)) } @@ -89,8 +89,8 @@ fun kotlinPrefixExpression( operand: JKExpression, token: JKKtOperatorToken, context: ConversionContext -): JKPrefixExpression { - val operandType = operand.type(context) +): JKPrefixExpression? { + val operandType = operand.type(context) ?: return null val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider) return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol)) } @@ -99,8 +99,8 @@ fun kotlinPostfixExpression( operand: JKExpression, token: JKKtOperatorToken, context: ConversionContext -): JKPostfixExpression { - val operandType = operand.type(context) +): JKPostfixExpression? { + val operandType = operand.type(context) ?: return null val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider) return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol)) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index 70119b0958b..cc539cfe766 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.util.* import org.jetbrains.kotlin.j2k.kotlinTypeByName import org.jetbrains.kotlin.psi.KtNullableType -fun JKExpression.type(context: ConversionContext): JKType = +fun JKExpression.type(context: ConversionContext): JKType? = when (this) { is JKLiteralExpression -> type.toJkType(context.symbolProvider) is JKOperatorExpression -> { @@ -42,6 +42,7 @@ fun JKExpression.type(context: ConversionContext): JKType = is JKFieldAccessExpressionImpl -> identifier.fieldType is JKQualifiedExpressionImpl -> this.selector.type(context) is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider) + is JKClassAccessExpression -> null else -> TODO(this::class.java.toString()) }