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 -> {
|
is JKBinaryExpression -> {
|
||||||
val left = applyToElement(element::left.detached()) as JKExpression
|
val left = applyToElement(element::left.detached()) as JKExpression
|
||||||
val right = applyToElement(element::right.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 -> {
|
is JKPrefixExpression -> {
|
||||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||||
recurse(kotlinPrefixExpression(operand, operatorToken, context))
|
kotlinPrefixExpression(operand, operatorToken, context)?.let { recurse(it) }
|
||||||
}
|
}
|
||||||
is JKPostfixExpression -> {
|
is JKPostfixExpression -> {
|
||||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
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())
|
else -> TODO(element.javaClass.toString())
|
||||||
}
|
} ?: recurse(element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,8 +79,8 @@ fun kotlinBinaryExpression(
|
|||||||
token: JKKtOperatorToken,
|
token: JKKtOperatorToken,
|
||||||
context: ConversionContext
|
context: ConversionContext
|
||||||
): JKBinaryExpression? {
|
): JKBinaryExpression? {
|
||||||
val leftType = left.type(context)
|
val leftType = left.type(context) ?: return null
|
||||||
val rightType = right.type(context)
|
val rightType = right.type(context) ?: return null
|
||||||
val methodSymbol = token.binaryExpressionMethodSymbol(leftType, rightType, context.symbolProvider)
|
val methodSymbol = token.binaryExpressionMethodSymbol(leftType, rightType, context.symbolProvider)
|
||||||
return JKBinaryExpressionImpl(left, right, JKKtOperatorImpl(token, methodSymbol))
|
return JKBinaryExpressionImpl(left, right, JKKtOperatorImpl(token, methodSymbol))
|
||||||
}
|
}
|
||||||
@@ -89,8 +89,8 @@ fun kotlinPrefixExpression(
|
|||||||
operand: JKExpression,
|
operand: JKExpression,
|
||||||
token: JKKtOperatorToken,
|
token: JKKtOperatorToken,
|
||||||
context: ConversionContext
|
context: ConversionContext
|
||||||
): JKPrefixExpression {
|
): JKPrefixExpression? {
|
||||||
val operandType = operand.type(context)
|
val operandType = operand.type(context) ?: return null
|
||||||
val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider)
|
val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider)
|
||||||
return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol))
|
return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol))
|
||||||
}
|
}
|
||||||
@@ -99,8 +99,8 @@ fun kotlinPostfixExpression(
|
|||||||
operand: JKExpression,
|
operand: JKExpression,
|
||||||
token: JKKtOperatorToken,
|
token: JKKtOperatorToken,
|
||||||
context: ConversionContext
|
context: ConversionContext
|
||||||
): JKPostfixExpression {
|
): JKPostfixExpression? {
|
||||||
val operandType = operand.type(context)
|
val operandType = operand.type(context) ?: return null
|
||||||
val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider)
|
val methodSymbol = token.unaryExpressionMethodSymbol(operandType, context.symbolProvider)
|
||||||
return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol))
|
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.j2k.kotlinTypeByName
|
||||||
import org.jetbrains.kotlin.psi.KtNullableType
|
import org.jetbrains.kotlin.psi.KtNullableType
|
||||||
|
|
||||||
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 JKOperatorExpression -> {
|
is JKOperatorExpression -> {
|
||||||
@@ -42,6 +42,7 @@ fun JKExpression.type(context: ConversionContext): JKType =
|
|||||||
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
||||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||||
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
||||||
|
is JKClassAccessExpression -> null
|
||||||
else -> TODO(this::class.java.toString())
|
else -> TODO(this::class.java.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user