[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,12 +431,17 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
): CompositeTransformResult<FirStatement> { ): CompositeTransformResult<FirStatement> {
return withLocalScopeCleanup { return withLocalScopeCleanup {
addLocalScope(FirLocalScope()) addLocalScope(FirLocalScope())
dataFlowAnalyzer.enterFunction(function) val functionIsNotAnalyzed = transformerPhase != function.resolvePhase
if (functionIsNotAnalyzed) {
dataFlowAnalyzer.enterFunction(function)
}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
transformDeclarationContent(function, data).also { transformDeclarationContent(function, data).also {
val result = it.single as FirFunction<*> if (functionIsNotAnalyzed) {
dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph -> val result = it.single as FirFunction<*>
result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph ->
result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph)
}
} }
} as CompositeTransformResult<FirStatement> } as CompositeTransformResult<FirStatement>
} }