[FIR] Collect logical expression context for smart cast preservation

This commit is contained in:
Yan Zhulanow
2023-06-21 19:56:23 +09:00
parent 92198ee016
commit b43fcae708
@@ -544,7 +544,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
data
else
ResolutionMode.ContextIndependent
transformer.firTowerDataContextCollector?.addStatementContext(block.statements[index], context.towerDataContext)
collectStatementContext(block.statements[index])
TransformData.Data(value)
}
block.transformOtherChildren(transformer, data)
@@ -559,6 +559,10 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
dataFlowAnalyzer.exitBlock(block)
}
private fun collectStatementContext(statement: FirStatement) {
transformer.firTowerDataContextCollector?.addStatementContext(statement, context.towerDataContext)
}
override fun transformThisReceiverExpression(
thisReceiverExpression: FirThisReceiverExpression,
data: ResolutionMode,
@@ -982,6 +986,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
return binaryLogicExpression.also(dataFlowAnalyzer::enterBinaryLogicExpression)
.transformLeftOperand(this, ResolutionMode.WithExpectedType(booleanType))
.also(dataFlowAnalyzer::exitLeftBinaryLogicExpressionArgument)
.also { collectStatementContext(it.rightOperand) }
.transformRightOperand(this, ResolutionMode.WithExpectedType(booleanType))
.also(dataFlowAnalyzer::exitBinaryLogicExpression)
.transformOtherChildren(transformer, ResolutionMode.WithExpectedType(booleanType))