[FIR] Consider fullyExpandedType instead of original type in isSubtypeForTypeMismatch, consider lookupTag in isError method

This commit is contained in:
Ivan Kochurkin
2021-06-03 15:02:09 +03:00
committed by teamcityserver
parent 0b0a96a1d3
commit da15f0ffe8
5 changed files with 8 additions and 15 deletions
@@ -382,8 +382,10 @@ private fun lowerThanBound(context: ConeInferenceContext, argument: ConeKotlinTy
fun FirMemberDeclaration.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID)
fun isSubtypeForTypeMismatch(context: ConeInferenceContext, subtype: ConeKotlinType, supertype: ConeKotlinType): Boolean {
return AbstractTypeChecker.isSubtypeOf(context, subtype, supertype)
|| isSubtypeOfForFunctionalTypeReturningUnit(context.session.typeContext, subtype, supertype)
val subtypeFullyExpanded = subtype.fullyExpandedType(context.session)
val supertypeFullyExpanded = supertype.fullyExpandedType(context.session)
return AbstractTypeChecker.isSubtypeOf(context, subtypeFullyExpanded, supertypeFullyExpanded)
|| isSubtypeOfForFunctionalTypeReturningUnit(context.session.typeContext, subtypeFullyExpanded, supertypeFullyExpanded)
}
private fun isSubtypeOfForFunctionalTypeReturningUnit(
@@ -85,7 +85,8 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
override fun KotlinTypeMarker.isError(): Boolean {
assert(this is ConeKotlinType)
return this is ConeClassErrorType || this is ConeKotlinErrorType || this.typeConstructor().isError()
return this is ConeClassErrorType || this is ConeKotlinErrorType || this.typeConstructor().isError() ||
(this is ConeClassLikeType && this.lookupTag is ConeClassLikeErrorLookupTag)
}
override fun KotlinTypeMarker.isUninferredParameter(): Boolean {