[FIR] Add cfg reference to classes
This commit is contained in:
@@ -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.expressions.FirAnnotationCall
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -46,6 +48,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
|
||||
internal val existingNestedClassifierNames: List<Name>
|
||||
) : FirRegularClass() {
|
||||
override val hasLazyNestedClassifiers: Boolean get() = true
|
||||
override val controlFlowGraphReference: FirControlFlowGraphReference get() = FirEmptyControlFlowGraphReference
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@@ -85,6 +88,10 @@ class FirJavaClass @FirImplementationDetail internal constructor(
|
||||
status = status.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirRegularClass {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
@FirBuilderDsl
|
||||
@@ -151,6 +158,13 @@ internal class FirJavaClassBuilder : AbstractFirRegularClassBuilder, FirAnnotati
|
||||
set(value) {
|
||||
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 {
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
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.symbols.impl.FirAnonymousObjectSymbol
|
||||
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 typeRef: FirTypeRef
|
||||
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)
|
||||
|
||||
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.FirSourceElement
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -36,10 +37,13 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration,
|
||||
abstract val companionObject: FirRegularClass?
|
||||
abstract val hasLazyNestedClassifiers: Boolean
|
||||
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)
|
||||
|
||||
abstract override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
|
||||
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.FirSourceElement
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -36,6 +37,7 @@ abstract class FirSealedClass : FirRegularClass() {
|
||||
abstract override val companionObject: FirRegularClass?
|
||||
abstract override val hasLazyNestedClassifiers: Boolean
|
||||
abstract override val superTypeRefs: List<FirTypeRef>
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
|
||||
abstract val inheritors: List<ClassId>
|
||||
|
||||
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 override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirSealedClass
|
||||
|
||||
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClass
|
||||
}
|
||||
|
||||
+2
@@ -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.FirTypeParametersOwnerBuilder
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -44,5 +45,6 @@ interface AbstractFirRegularClassBuilder : FirClassBuilder, FirTypeParametersOwn
|
||||
abstract var symbol: FirRegularClassSymbol
|
||||
abstract var companionObject: FirRegularClass?
|
||||
abstract var hasLazyNestedClassifiers: Boolean
|
||||
abstract var controlFlowGraphReference: FirControlFlowGraphReference
|
||||
override fun build(): FirRegularClass
|
||||
}
|
||||
|
||||
+2
@@ -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.expressions.FirAnnotationCall
|
||||
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.symbols.impl.FirAnonymousObjectSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
|
||||
+9
@@ -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.impl.FirClassImpl
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -71,6 +73,13 @@ open class FirClassImplBuilder : AbstractFirRegularClassBuilder, FirAnnotationCo
|
||||
set(value) {
|
||||
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)
|
||||
|
||||
+9
@@ -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.impl.FirSealedClassImpl
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -75,6 +77,13 @@ class FirSealedClassBuilder : AbstractFirRegularClassBuilder, FirAnnotationConta
|
||||
set(value) {
|
||||
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)
|
||||
|
||||
+11
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
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.symbols.impl.FirAnonymousObjectSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -34,6 +36,8 @@ internal class FirAnonymousObjectImpl(
|
||||
override var typeRef: FirTypeRef,
|
||||
override val symbol: FirAnonymousObjectSymbol,
|
||||
) : FirAnonymousObject() {
|
||||
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
@@ -43,6 +47,7 @@ internal class FirAnonymousObjectImpl(
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
typeRef.accept(visitor, data)
|
||||
controlFlowGraphReference.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
|
||||
@@ -50,6 +55,12 @@ internal class FirAnonymousObjectImpl(
|
||||
declarations.transformInplace(transformer, data)
|
||||
annotations.transformInplace(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
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -41,6 +43,7 @@ internal class FirClassImpl(
|
||||
override val superTypeRefs: MutableList<FirTypeRef>,
|
||||
) : FirRegularClass() {
|
||||
override val hasLazyNestedClassifiers: Boolean get() = false
|
||||
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@@ -53,6 +56,7 @@ internal class FirClassImpl(
|
||||
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }
|
||||
declarations.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 {
|
||||
@@ -63,6 +67,7 @@ internal class FirClassImpl(
|
||||
declarations.transformInplace(transformer, data)
|
||||
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
|
||||
superTypeRefs.transformInplace(transformer, data)
|
||||
transformControlFlowGraphReference(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -71,6 +76,11 @@ internal class FirClassImpl(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirClassImpl {
|
||||
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
+10
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
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.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -44,6 +46,7 @@ internal class FirSealedClassImpl(
|
||||
override val inheritors: MutableList<ClassId>,
|
||||
) : FirSealedClass() {
|
||||
override val hasLazyNestedClassifiers: Boolean get() = false
|
||||
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@@ -56,6 +59,7 @@ internal class FirSealedClassImpl(
|
||||
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }
|
||||
declarations.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 {
|
||||
@@ -66,6 +70,7 @@ internal class FirSealedClassImpl(
|
||||
declarations.transformInplace(transformer, data)
|
||||
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
|
||||
superTypeRefs.transformInplace(transformer, data)
|
||||
transformControlFlowGraphReference(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -74,6 +79,11 @@ internal class FirSealedClassImpl(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
|
||||
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ object FieldSets {
|
||||
|
||||
val status = field("status", declarationStatus)
|
||||
|
||||
val controlFlowGraphReferenceField = field("controlFlowGraphReference", controlFlowGraphReference)
|
||||
val controlFlowGraphReferenceField = field("controlFlowGraphReference", controlFlowGraphReference).withTransform()
|
||||
|
||||
val visibility = field(visibilityType)
|
||||
|
||||
|
||||
+4
-2
@@ -85,7 +85,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
function.configure {
|
||||
withArg("F", "FirFunction<F>")
|
||||
parentArg(callableDeclaration, "F", "F")
|
||||
+controlFlowGraphReferenceField.withTransform()
|
||||
+controlFlowGraphReferenceField
|
||||
+symbol("FirFunctionSymbol", "F")
|
||||
+fieldList(valueParameter, withReplace = true).withTransform()
|
||||
+body(nullable = true)
|
||||
@@ -231,11 +231,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+field("companionObject", regularClass, nullable = true)
|
||||
+booleanField("hasLazyNestedClassifiers")
|
||||
+superTypeRefs(withReplace = true)
|
||||
+controlFlowGraphReferenceField
|
||||
}
|
||||
|
||||
anonymousObject.configure {
|
||||
parentArg(klass, "F", anonymousObject)
|
||||
+symbol("FirAnonymousObjectSymbol")
|
||||
+controlFlowGraphReferenceField
|
||||
}
|
||||
|
||||
sealedClass.configure {
|
||||
@@ -285,7 +287,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
property.configure {
|
||||
parentArg(variable, "F", property)
|
||||
parentArg(callableMemberDeclaration, "F", property)
|
||||
+controlFlowGraphReferenceField.withTransform()
|
||||
+controlFlowGraphReferenceField
|
||||
+symbol("FirPropertySymbol")
|
||||
+field("backingFieldSymbol", backingFieldSymbolType)
|
||||
+booleanField("isLocal")
|
||||
|
||||
Reference in New Issue
Block a user