[FIR] Add cfg reference to classes

This commit is contained in:
Dmitriy Novozhilov
2020-03-26 14:47:20 +03:00
parent c1c0df962f
commit 8d3ee4f304
13 changed files with 84 additions and 3 deletions
@@ -18,6 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuil
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -46,6 +48,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
internal val existingNestedClassifierNames: List<Name> internal val existingNestedClassifierNames: List<Name>
) : FirRegularClass() { ) : FirRegularClass() {
override val hasLazyNestedClassifiers: Boolean get() = true override val hasLazyNestedClassifiers: Boolean get() = true
override val controlFlowGraphReference: FirControlFlowGraphReference get() = FirEmptyControlFlowGraphReference
init { init {
symbol.bind(this) symbol.bind(this)
@@ -85,6 +88,10 @@ class FirJavaClass @FirImplementationDetail internal constructor(
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
return this return this
} }
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirRegularClass {
return this
}
} }
@FirBuilderDsl @FirBuilderDsl
@@ -151,6 +158,13 @@ internal class FirJavaClassBuilder : AbstractFirRegularClassBuilder, FirAnnotati
set(value) { set(value) {
throw IllegalStateException() throw IllegalStateException()
} }
@Deprecated("Modification of 'controlFlowGraphReference' has no impact for FirClassImplBuilder", level = DeprecationLevel.HIDDEN)
override var controlFlowGraphReference: FirControlFlowGraphReference
get() = throw IllegalStateException()
set(value) {
throw IllegalStateException()
}
} }
internal inline fun buildJavaClass(init: FirJavaClassBuilder.() -> Unit): FirJavaClass { internal inline fun buildJavaClass(init: FirJavaClassBuilder.() -> Unit): FirJavaClass {
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -31,6 +32,9 @@ abstract class FirAnonymousObject : FirClass<FirAnonymousObject>, FirExpression(
abstract override val scopeProvider: FirScopeProvider abstract override val scopeProvider: FirScopeProvider
abstract override val typeRef: FirTypeRef abstract override val typeRef: FirTypeRef
abstract override val symbol: FirAnonymousObjectSymbol abstract override val symbol: FirAnonymousObjectSymbol
abstract val controlFlowGraphReference: FirControlFlowGraphReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousObject(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousObject(this, data)
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousObject
} }
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -36,10 +37,13 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration,
abstract val companionObject: FirRegularClass? abstract val companionObject: FirRegularClass?
abstract val hasLazyNestedClassifiers: Boolean abstract val hasLazyNestedClassifiers: Boolean
abstract override val superTypeRefs: List<FirTypeRef> abstract override val superTypeRefs: List<FirTypeRef>
abstract val controlFlowGraphReference: FirControlFlowGraphReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitRegularClass(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitRegularClass(this, data)
abstract override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>) abstract override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirRegularClass abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirRegularClass
abstract fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirRegularClass
} }
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -36,6 +37,7 @@ abstract class FirSealedClass : FirRegularClass() {
abstract override val companionObject: FirRegularClass? abstract override val companionObject: FirRegularClass?
abstract override val hasLazyNestedClassifiers: Boolean abstract override val hasLazyNestedClassifiers: Boolean
abstract override val superTypeRefs: List<FirTypeRef> abstract override val superTypeRefs: List<FirTypeRef>
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
abstract val inheritors: List<ClassId> abstract val inheritors: List<ClassId>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSealedClass(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSealedClass(this, data)
@@ -43,4 +45,6 @@ abstract class FirSealedClass : FirRegularClass() {
abstract fun replaceInheritors(newInheritors: List<ClassId>) abstract fun replaceInheritors(newInheritors: List<ClassId>)
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirSealedClass abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirSealedClass
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClass
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.FirClassBuilder import org.jetbrains.kotlin.fir.declarations.builder.FirClassBuilder
import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParametersOwnerBuilder import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParametersOwnerBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -44,5 +45,6 @@ interface AbstractFirRegularClassBuilder : FirClassBuilder, FirTypeParametersOwn
abstract var symbol: FirRegularClassSymbol abstract var symbol: FirRegularClassSymbol
abstract var companionObject: FirRegularClass? abstract var companionObject: FirRegularClass?
abstract var hasLazyNestedClassifiers: Boolean abstract var hasLazyNestedClassifiers: Boolean
abstract var controlFlowGraphReference: FirControlFlowGraphReference
override fun build(): FirRegularClass override fun build(): FirRegularClass
} }
@@ -18,6 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirClassBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousObjectImpl import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousObjectImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -71,6 +73,13 @@ open class FirClassImplBuilder : AbstractFirRegularClassBuilder, FirAnnotationCo
set(value) { set(value) {
throw IllegalStateException() throw IllegalStateException()
} }
@Deprecated("Modification of 'controlFlowGraphReference' has no impact for FirClassImplBuilder", level = DeprecationLevel.HIDDEN)
override var controlFlowGraphReference: FirControlFlowGraphReference
get() = throw IllegalStateException()
set(value) {
throw IllegalStateException()
}
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirSealedClassImpl import org.jetbrains.kotlin.fir.declarations.impl.FirSealedClassImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -75,6 +77,13 @@ class FirSealedClassBuilder : AbstractFirRegularClassBuilder, FirAnnotationConta
set(value) { set(value) {
throw IllegalStateException() throw IllegalStateException()
} }
@Deprecated("Modification of 'controlFlowGraphReference' has no impact for FirSealedClassBuilder", level = DeprecationLevel.HIDDEN)
override var controlFlowGraphReference: FirControlFlowGraphReference
get() = throw IllegalStateException()
set(value) {
throw IllegalStateException()
}
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -34,6 +36,8 @@ internal class FirAnonymousObjectImpl(
override var typeRef: FirTypeRef, override var typeRef: FirTypeRef,
override val symbol: FirAnonymousObjectSymbol, override val symbol: FirAnonymousObjectSymbol,
) : FirAnonymousObject() { ) : FirAnonymousObject() {
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -43,6 +47,7 @@ internal class FirAnonymousObjectImpl(
declarations.forEach { it.accept(visitor, data) } declarations.forEach { it.accept(visitor, data) }
annotations.forEach { it.accept(visitor, data) } annotations.forEach { it.accept(visitor, data) }
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
controlFlowGraphReference.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
@@ -50,6 +55,12 @@ internal class FirAnonymousObjectImpl(
declarations.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
annotations.transformInplace(transformer, data) annotations.transformInplace(transformer, data)
typeRef = typeRef.transformSingle(transformer, data) typeRef = typeRef.transformSingle(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this
}
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this return this
} }
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -41,6 +43,7 @@ internal class FirClassImpl(
override val superTypeRefs: MutableList<FirTypeRef>, override val superTypeRefs: MutableList<FirTypeRef>,
) : FirRegularClass() { ) : FirRegularClass() {
override val hasLazyNestedClassifiers: Boolean get() = false override val hasLazyNestedClassifiers: Boolean get() = false
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init { init {
symbol.bind(this) symbol.bind(this)
@@ -53,6 +56,7 @@ internal class FirClassImpl(
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) } (declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }
declarations.forEach { it.accept(visitor, data) } declarations.forEach { it.accept(visitor, data) }
superTypeRefs.forEach { it.accept(visitor, data) } superTypeRefs.forEach { it.accept(visitor, data) }
controlFlowGraphReference.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClassImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClassImpl {
@@ -63,6 +67,7 @@ internal class FirClassImpl(
declarations.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion } companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data) superTypeRefs.transformInplace(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this return this
} }
@@ -71,6 +76,11 @@ internal class FirClassImpl(
return this return this
} }
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
}
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
resolvePhase = newResolvePhase resolvePhase = newResolvePhase
} }
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirSealedClass import org.jetbrains.kotlin.fir.declarations.FirSealedClass
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -44,6 +46,7 @@ internal class FirSealedClassImpl(
override val inheritors: MutableList<ClassId>, override val inheritors: MutableList<ClassId>,
) : FirSealedClass() { ) : FirSealedClass() {
override val hasLazyNestedClassifiers: Boolean get() = false override val hasLazyNestedClassifiers: Boolean get() = false
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init { init {
symbol.bind(this) symbol.bind(this)
@@ -56,6 +59,7 @@ internal class FirSealedClassImpl(
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) } (declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }
declarations.forEach { it.accept(visitor, data) } declarations.forEach { it.accept(visitor, data) }
superTypeRefs.forEach { it.accept(visitor, data) } superTypeRefs.forEach { it.accept(visitor, data) }
controlFlowGraphReference.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSealedClassImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
@@ -66,6 +70,7 @@ internal class FirSealedClassImpl(
declarations.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion } companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
superTypeRefs.transformInplace(transformer, data) superTypeRefs.transformInplace(transformer, data)
transformControlFlowGraphReference(transformer, data)
return this return this
} }
@@ -74,6 +79,11 @@ internal class FirSealedClassImpl(
return this return this
} }
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
}
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
resolvePhase = newResolvePhase resolvePhase = newResolvePhase
} }
@@ -71,7 +71,7 @@ object FieldSets {
val status = field("status", declarationStatus) val status = field("status", declarationStatus)
val controlFlowGraphReferenceField = field("controlFlowGraphReference", controlFlowGraphReference) val controlFlowGraphReferenceField = field("controlFlowGraphReference", controlFlowGraphReference).withTransform()
val visibility = field(visibilityType) val visibility = field(visibilityType)
@@ -85,7 +85,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
function.configure { function.configure {
withArg("F", "FirFunction<F>") withArg("F", "FirFunction<F>")
parentArg(callableDeclaration, "F", "F") parentArg(callableDeclaration, "F", "F")
+controlFlowGraphReferenceField.withTransform() +controlFlowGraphReferenceField
+symbol("FirFunctionSymbol", "F") +symbol("FirFunctionSymbol", "F")
+fieldList(valueParameter, withReplace = true).withTransform() +fieldList(valueParameter, withReplace = true).withTransform()
+body(nullable = true) +body(nullable = true)
@@ -231,11 +231,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("companionObject", regularClass, nullable = true) +field("companionObject", regularClass, nullable = true)
+booleanField("hasLazyNestedClassifiers") +booleanField("hasLazyNestedClassifiers")
+superTypeRefs(withReplace = true) +superTypeRefs(withReplace = true)
+controlFlowGraphReferenceField
} }
anonymousObject.configure { anonymousObject.configure {
parentArg(klass, "F", anonymousObject) parentArg(klass, "F", anonymousObject)
+symbol("FirAnonymousObjectSymbol") +symbol("FirAnonymousObjectSymbol")
+controlFlowGraphReferenceField
} }
sealedClass.configure { sealedClass.configure {
@@ -285,7 +287,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
property.configure { property.configure {
parentArg(variable, "F", property) parentArg(variable, "F", property)
parentArg(callableMemberDeclaration, "F", property) parentArg(callableMemberDeclaration, "F", property)
+controlFlowGraphReferenceField.withTransform() +controlFlowGraphReferenceField
+symbol("FirPropertySymbol") +symbol("FirPropertySymbol")
+field("backingFieldSymbol", backingFieldSymbolType) +field("backingFieldSymbol", backingFieldSymbolType)
+booleanField("isLocal") +booleanField("isLocal")