[FIR] Try to infer result type of incomplete when expression

^KT-62069 Fixed
This commit is contained in:
Ivan Kochurkin
2023-11-17 12:51:56 +01:00
committed by Space Team
parent e2f245096c
commit 88f7b085e6
28 changed files with 113 additions and 59 deletions
@@ -68,7 +68,9 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirAbstractBodyRes
var completionNeeded = false
context.withWhenSubjectType(subjectType, components) {
when {
whenExpression.branches.isEmpty() -> {}
whenExpression.branches.isEmpty() -> {
whenExpression.resultType = session.builtinTypes.unitType.type
}
whenExpression.isOneBranch() && data.forceFullCompletion && data !is ResolutionMode.WithExpectedType -> {
whenExpression = whenExpression.transformBranches(transformer, ResolutionMode.ContextIndependent)
whenExpression.resultType = whenExpression.branches.first().result.resolvedType
@@ -115,7 +117,7 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirAbstractBodyRes
}
private fun FirWhenExpression.replaceReturnTypeIfNotExhaustive(): FirWhenExpression {
if (!isProperlyExhaustive) {
if (!isProperlyExhaustive && !usedAsExpression) {
resultType = session.builtinTypes.unitType.type
}
return this