FIR: unwrap intersection overrides when looking for owner class

But not substitution overrides! This is important if the method called
is an intersection override where one of the intersected types is a
subtype of a generic type.
This commit is contained in:
pyos
2022-10-07 11:40:23 +02:00
committed by Space Team
parent 9f65c6022c
commit e2a83a0ed0
5 changed files with 58 additions and 7 deletions
@@ -19,11 +19,14 @@ fun FirCallableSymbol<*>.dispatchReceiverTypeOrNull(): ConeKotlinType? =
fun FirCallableSymbol<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
fir.dispatchReceiverClassOrNull()
fun FirCallableDeclaration.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? {
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride) return symbol.baseForIntersectionOverride!!.fir.dispatchReceiverClassOrNull()
fun FirCallableDeclaration.dispatchReceiverClassTypeOrNull(): ConeClassLikeType? =
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride)
baseForIntersectionOverride!!.dispatchReceiverClassTypeOrNull()
else
dispatchReceiverType as? ConeClassLikeType
return (dispatchReceiverType as? ConeClassLikeType)?.lookupTag
}
fun FirCallableDeclaration.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
dispatchReceiverClassTypeOrNull()?.lookupTag
fun FirCallableSymbol<*>.containingClassLookupTag(): ConeClassLikeLookupTag? = fir.containingClassLookupTag()
fun FirCallableDeclaration.containingClassLookupTag(): ConeClassLikeLookupTag? {