FIR2IR: do not approximate reified type arguments to super class
This commit is contained in:
+1
-1
@@ -657,7 +657,7 @@ class CallAndReferenceGenerator(
|
||||
val typeParameter = access.findTypeParameter(index)
|
||||
val argumentFirType = (argument as FirTypeProjectionWithVariance).typeRef
|
||||
val argumentIrType = if (typeParameter?.isReified == true) {
|
||||
argumentFirType.approximatedIfNeededOrSelf(approximator, Visibilities.Public).toIrType()
|
||||
argumentFirType.approximatedForPublicPosition(approximator).toIrType()
|
||||
} else {
|
||||
argumentFirType.toIrType()
|
||||
}
|
||||
|
||||
@@ -256,16 +256,19 @@ fun FirTypeRef.approximatedIfNeededOrSelf(
|
||||
containingCallableVisibility: Visibility?,
|
||||
isInlineFunction: Boolean = false
|
||||
): FirTypeRef {
|
||||
val approximatedType = if (this is FirResolvedTypeRef &&
|
||||
(containingCallableVisibility == Visibilities.Public || containingCallableVisibility == Visibilities.Protected)
|
||||
) {
|
||||
if (type.requiresApproximationInPublicPosition()) this.approximated(approximator, toSuper = true) else this
|
||||
} else {
|
||||
val approximated = if (containingCallableVisibility == Visibilities.Public || containingCallableVisibility == Visibilities.Protected)
|
||||
approximatedForPublicPosition(approximator)
|
||||
else
|
||||
this
|
||||
}
|
||||
return approximatedType.hideLocalTypeIfNeeded(containingCallableVisibility, isInlineFunction).withoutEnhancedNullability()
|
||||
return approximated.hideLocalTypeIfNeeded(containingCallableVisibility, isInlineFunction).withoutEnhancedNullability()
|
||||
}
|
||||
|
||||
fun FirTypeRef.approximatedForPublicPosition(approximator: AbstractTypeApproximator): FirTypeRef =
|
||||
if (this is FirResolvedTypeRef && type.requiresApproximationInPublicPosition())
|
||||
this.approximated(approximator, toSuper = true)
|
||||
else
|
||||
this
|
||||
|
||||
private fun ConeKotlinType.requiresApproximationInPublicPosition(): Boolean {
|
||||
return when (this) {
|
||||
is ConeIntegerLiteralType,
|
||||
|
||||
Reference in New Issue
Block a user