[FIR] Unwrap flexible types in when exhaustiveness checker

^KT-56942 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-02-24 12:38:55 +02:00
committed by Space Team
parent 01c670194a
commit 0bbc61f459
8 changed files with 219 additions and 1 deletions
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.isBooleanOrNullableBoolean
import org.jetbrains.kotlin.fir.types.lowerBoundIfFlexible
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
object FirExhaustiveWhenChecker : FirWhenExpressionChecker() {
@@ -45,7 +46,7 @@ object FirExhaustiveWhenChecker : FirWhenExpressionChecker() {
reporter.reportOn(source, FirErrors.NO_ELSE_IN_WHEN, whenExpression.missingCases, context)
}
} else {
val subjectType = whenExpression.subject?.typeRef?.coneType ?: return
val subjectType = whenExpression.subject?.typeRef?.coneType?.lowerBoundIfFlexible() ?: return
val subjectClassSymbol = subjectType.fullyExpandedType(context.session).toRegularClassSymbol(context.session) ?: return
val kind = when {
subjectClassSymbol.modality == Modality.SEALED -> AlgebraicTypeKind.Sealed