[FIR] Don't pass analyzed lambda to data flow analyzer

This commit is contained in:
Dmitriy Novozhilov
2020-03-31 11:57:04 +03:00
parent 68b5e4d13f
commit d1422dbf9f
@@ -431,13 +431,18 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
): CompositeTransformResult<FirStatement> { ): CompositeTransformResult<FirStatement> {
return withLocalScopeCleanup { return withLocalScopeCleanup {
addLocalScope(FirLocalScope()) addLocalScope(FirLocalScope())
val functionIsNotAnalyzed = transformerPhase != function.resolvePhase
if (functionIsNotAnalyzed) {
dataFlowAnalyzer.enterFunction(function) dataFlowAnalyzer.enterFunction(function)
}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
transformDeclarationContent(function, data).also { transformDeclarationContent(function, data).also {
if (functionIsNotAnalyzed) {
val result = it.single as FirFunction<*> val result = it.single as FirFunction<*>
dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph -> dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph ->
result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph)
} }
}
} as CompositeTransformResult<FirStatement> } as CompositeTransformResult<FirStatement>
} }
} }