[FIR] Make result type after safe-call nullable (for nullable receiver)

This commit is contained in:
Simon Ogorodnik
2019-05-15 16:02:47 +03:00
committed by Mikhail Glukhikh
parent f7b6fec70c
commit 672c172c99
5 changed files with 22 additions and 15 deletions
@@ -202,7 +202,15 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
is FirResolvedCallableReference -> {
val symbol = newCallee.coneSymbol
if (symbol is ConeCallableSymbol) {
jump.tryCalculateReturnType(symbol.firUnsafe())
val returnType = jump.tryCalculateReturnType(symbol.firUnsafe())
if (access.safe && access.explicitReceiver!!.resultType.coneTypeUnsafe<ConeKotlinType>().isNullable) {
returnType.withReplacedConeType(
session,
returnType.coneTypeUnsafe<ConeKotlinType>().withNullability(ConeNullability.NULLABLE)
)
} else {
returnType
}
} else if (symbol is ConeClassifierSymbol) {
val firUnsafe = symbol.firUnsafe<FirElement>()
// TODO: unhack