FIR: more accurate type checking in typeFromCallee
This commit is contained in:
@@ -256,10 +256,17 @@ fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifi
|
|||||||
|
|
||||||
fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirResolvedTypeRef {
|
fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirResolvedTypeRef {
|
||||||
val makeNullable: Boolean by lazy {
|
val makeNullable: Boolean by lazy {
|
||||||
if (access is FirQualifiedAccess)
|
if (access is FirQualifiedAccess && access.safe) {
|
||||||
access.safe && access.explicitReceiver!!.resultType.coneTypeUnsafe<ConeKotlinType>().isNullable
|
val explicitReceiver = access.explicitReceiver!!
|
||||||
else
|
val receiverResultType = explicitReceiver.resultType
|
||||||
|
if (receiverResultType is FirResolvedTypeRef) {
|
||||||
|
receiverResultType.type.isNullable
|
||||||
|
} else {
|
||||||
|
throw AssertionError("Receiver ${explicitReceiver.render()} type is unresolved: ${receiverResultType.render()}")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
false
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return when (val newCallee = access.calleeReference) {
|
return when (val newCallee = access.calleeReference) {
|
||||||
|
|||||||
Reference in New Issue
Block a user