FIR IDE: make KtExpressionTypeProvider work for more cases
Currently it doesn't work for the following * labeled expression * annotated expressions * object literal expressions
This commit is contained in:
committed by
TeamCityServer
parent
3aa6cb25ba
commit
030749eaeb
+10
-1
@@ -35,7 +35,7 @@ internal class KtFirExpressionTypeProvider(
|
||||
}
|
||||
|
||||
override fun getKtExpressionType(expression: KtExpression): KtType = withValidityAssertion {
|
||||
when (val fir = expression.getOrBuildFir(firResolveState)) {
|
||||
when (val fir = expression.unwrap().getOrBuildFir(firResolveState)) {
|
||||
is FirExpression -> fir.typeRef.coneType.asKtType()
|
||||
is FirNamedReference -> fir.getReferencedElementType().asKtType()
|
||||
is FirStatement -> with(analysisSession) { builtinTypes.UNIT }
|
||||
@@ -43,6 +43,15 @@ internal class KtFirExpressionTypeProvider(
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtExpression.unwrap(): KtExpression {
|
||||
return when (this) {
|
||||
is KtLabeledExpression -> baseExpression?.unwrap()
|
||||
is KtAnnotatedExpression -> baseExpression?.unwrap()
|
||||
is KtObjectLiteralExpression -> objectDeclaration
|
||||
else -> null
|
||||
} ?: this
|
||||
}
|
||||
|
||||
override fun getExpectedType(expression: PsiElement): KtType? {
|
||||
val expectedType = getExpectedTypeByReturnExpression(expression)
|
||||
?: getExpressionTypeByIfOrBooleanCondition(expression)
|
||||
|
||||
Reference in New Issue
Block a user