From b43fcae7086d12761bc54c1877de31a4480f6c25 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 21 Jun 2023 19:56:23 +0900 Subject: [PATCH] [FIR] Collect logical expression context for smart cast preservation --- .../body/resolve/FirExpressionsResolveTransformer.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index abd896efeef..3bbeb49652a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -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))