New J2K: Make JKExpression.type nullable
This commit is contained in:
committed by
Ilya Kirillov
parent
28aeaa040e
commit
9532dec452
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user