[FIR] Assume nullable types as good types for ILT approximation

#KT-41982 Fixed
This commit is contained in:
Dmitriy Novozhilov
2020-09-18 13:48:29 +03:00
parent f069857492
commit 40a9bb6eac
10 changed files with 75 additions and 11 deletions
@@ -64,9 +64,11 @@ class ConeIntegerLiteralTypeImpl : ConeIntegerLiteralType {
}
override fun getApproximatedType(expectedType: ConeKotlinType?): ConeClassLikeType {
val approximatedType = when (val expectedTypeForApproximation = expectedType?.lowerBoundIfFlexible()) {
val expectedTypeForApproximation = (expectedType?.lowerBoundIfFlexible() as? ConeClassLikeType)
?.withNullability(ConeNullability.NOT_NULL)
val approximatedType = when (expectedTypeForApproximation) {
null, !in possibleTypes -> possibleTypes.first()
else -> expectedTypeForApproximation as ConeClassLikeType
else -> expectedTypeForApproximation
}
return approximatedType.withNullability(nullability)
}
@@ -155,4 +157,4 @@ private fun ConeClassLikeType.withNullability(nullability: ConeNullability): Con
is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, typeArguments, nullability.isNullable)
else -> error("sealed")
}
}
}