FIR: approximate intersections in public position properly

#KT-48166 Fixed
This commit is contained in:
Mikhail Glukhikh
2021-08-18 10:58:25 +03:00
committed by TeamCityServer
parent 7b0e5927cb
commit 19ab0ab2f8
7 changed files with 38 additions and 4 deletions
@@ -283,12 +283,15 @@ fun FirTypeRef.withReplacedConeType(
fun FirTypeRef.approximated(
typeApproximator: ConeTypeApproximator,
toSuper: Boolean,
conf: TypeApproximatorConfiguration = TypeApproximatorConfiguration.PublicDeclaration
): FirTypeRef {
val alternativeType = (coneType as? ConeIntersectionType)?.alternativeType ?: coneType
if (alternativeType !== coneType && !alternativeType.requiresApproximationInPublicPosition()) {
return withReplacedConeType(alternativeType)
}
val approximatedType = if (toSuper)
typeApproximator.approximateToSuperType(coneType, conf)
typeApproximator.approximateToSuperType(alternativeType, TypeApproximatorConfiguration.PublicDeclaration)
else
typeApproximator.approximateToSubType(coneType, conf)
typeApproximator.approximateToSubType(alternativeType, TypeApproximatorConfiguration.PublicDeclaration)
return withReplacedConeType(approximatedType)
}