[FIR] Collect logical expression context for smart cast preservation
This commit is contained in:
+6
-1
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user