[FIR] Add control flow graph to FirAnonymousInitializer

This commit is contained in:
Dmitriy Novozhilov
2020-03-27 12:03:13 +03:00
parent 8d3ee4f304
commit 74d86d82c6
12 changed files with 301 additions and 110 deletions
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -21,6 +22,9 @@ abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaratio
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract val body: FirBlock?
abstract val controlFlowGraphReference: FirControlFlowGraphReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousInitializer(this, data)
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousInitializer
}
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousInitializerImpl
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -23,12 +25,21 @@ internal class FirAnonymousInitializerImpl(
override var resolvePhase: FirResolvePhase,
override var body: FirBlock?,
) : FirAnonymousInitializer() {
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
body?.accept(visitor, data)
controlFlowGraphReference.accept(visitor, data)
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousInitializerImpl {
body = body?.transformSingle(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousInitializerImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
}
@@ -367,6 +367,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousInitializer.configure {
+body(nullable = true)
+controlFlowGraphReferenceField
}
file.configure {