[FE 1.0] Properly handle intersection types in check if cast possible or not

^KT-47685 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-07-12 10:43:53 +03:00
committed by teamcityserver
parent f0c4d06fc9
commit 47b0071560
8 changed files with 123 additions and 0 deletions
@@ -43,6 +43,10 @@ object CastDiagnosticsUtil {
rhsType: KotlinType,
platformToKotlinClassMapper: PlatformToKotlinClassMapper
): Boolean {
val typeConstructor = lhsType.constructor
if (typeConstructor is IntersectionTypeConstructor) {
return typeConstructor.supertypes.any { isCastPossible(it, rhsType, platformToKotlinClassMapper) }
}
val rhsNullable = TypeUtils.isNullableType(rhsType)
val lhsNullable = TypeUtils.isNullableType(lhsType)
if (KotlinBuiltIns.isNothing(lhsType)) return true