New J2K: Make JKExpression.type nullable

This commit is contained in:
Ilya Kirillov
2018-11-27 13:34:27 +03:00
committed by Ilya Kirillov
parent 28aeaa040e
commit 9532dec452
3 changed files with 12 additions and 11 deletions
@@ -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)
}
}
@@ -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))
}
@@ -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())
}