[FIR] Consider Nothing? as null constant in DFA, ^KT-44561 Fixed

This commit is contained in:
Ivan Kochurkin
2021-12-15 19:26:07 +03:00
committed by teamcity
parent 68f3ab2622
commit 84927e10b0
19 changed files with 926 additions and 922 deletions
@@ -477,11 +477,15 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
val leftConst = leftOperand as? FirConstExpression<*>
val rightConst = rightOperand as? FirConstExpression<*>
val leftIsNullConst = leftConst?.kind == ConstantValueKind.Null
val rightIsNullConst = rightConst?.kind == ConstantValueKind.Null
val leftIsNull = leftIsNullConst || leftOperand.coneType.isNullableNothing && !rightIsNullConst
val rightIsNull = rightIsNullConst || rightOperand.coneType.isNullableNothing && !leftIsNullConst
when {
leftConst != null && rightConst != null -> return
leftConst?.kind == ConstantValueKind.Null -> processEqNull(node, rightOperand, operation)
rightConst?.kind == ConstantValueKind.Null -> processEqNull(node, leftOperand, operation)
leftIsNull -> processEqNull(node, rightOperand, operation)
rightIsNull -> processEqNull(node, leftOperand, operation)
leftConst != null -> processEqWithConst(node, rightOperand, leftConst, operation)
rightConst != null -> processEqWithConst(node, leftOperand, rightConst, operation)
else -> processEq(node, leftOperand, rightOperand, operation)