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:
@@ -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? {
|
||||
|
||||
Reference in New Issue
Block a user