[FIR] Make FirClass an inheritor of FirControlFlowGraphOwner
Both inheritors of FirClass (FirRegularClass and FirAnonymousObject) already were CFG owners
This commit is contained in:
committed by
Space Team
parent
a9c1091140
commit
cbfa155333
+1
-1
@@ -377,7 +377,7 @@ class ControlFlowGraphBuilder {
|
||||
}
|
||||
|
||||
fun enterClass(klass: FirClass, buildGraph: Boolean): Pair<CFGNode<*>?, ClassEnterNode?> {
|
||||
if (!buildGraph || klass !is FirControlFlowGraphOwner) {
|
||||
if (!buildGraph) {
|
||||
graphs.push(ControlFlowGraph(null, "<discarded class graph>", ControlFlowGraph.Kind.Class))
|
||||
return null to null
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirAnonymousObject : FirClass(), FirControlFlowGraphOwner {
|
||||
abstract class FirAnonymousObject : FirClass() {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
abstract override val moduleData: FirModuleData
|
||||
@@ -30,12 +30,12 @@ abstract class FirAnonymousObject : FirClass(), FirControlFlowGraphOwner {
|
||||
abstract override val typeParameters: List<FirTypeParameterRef>
|
||||
abstract override val status: FirDeclarationStatus
|
||||
abstract override val deprecationsProvider: DeprecationsProvider
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract override val classKind: ClassKind
|
||||
abstract override val superTypeRefs: List<FirTypeRef>
|
||||
abstract override val declarations: List<FirDeclaration>
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val scopeProvider: FirScopeProvider
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract override val symbol: FirAnonymousObjectSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousObject(this, data)
|
||||
@@ -50,12 +50,12 @@ abstract class FirAnonymousObject : FirClass(), FirControlFlowGraphOwner {
|
||||
|
||||
abstract override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider)
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirAnonymousObject
|
||||
|
||||
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirAnonymousObject
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -21,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
sealed class FirClass : FirClassLikeDeclaration(), FirStatement, FirTypeParameterRefsOwner {
|
||||
sealed class FirClass : FirClassLikeDeclaration(), FirStatement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
abstract override val moduleData: FirModuleData
|
||||
@@ -30,6 +31,7 @@ sealed class FirClass : FirClassLikeDeclaration(), FirStatement, FirTypeParamete
|
||||
abstract override val typeParameters: List<FirTypeParameterRef>
|
||||
abstract override val status: FirDeclarationStatus
|
||||
abstract override val deprecationsProvider: DeprecationsProvider
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract override val symbol: FirClassSymbol<out FirClass>
|
||||
abstract val classKind: ClassKind
|
||||
abstract val superTypeRefs: List<FirTypeRef>
|
||||
@@ -49,6 +51,8 @@ sealed class FirClass : FirClassLikeDeclaration(), FirStatement, FirTypeParamete
|
||||
|
||||
abstract override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider)
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirRegularClass : FirClass(), FirControlFlowGraphOwner {
|
||||
abstract class FirRegularClass : FirClass() {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
abstract override val moduleData: FirModuleData
|
||||
@@ -31,11 +31,11 @@ abstract class FirRegularClass : FirClass(), FirControlFlowGraphOwner {
|
||||
abstract override val typeParameters: List<FirTypeParameterRef>
|
||||
abstract override val status: FirDeclarationStatus
|
||||
abstract override val deprecationsProvider: DeprecationsProvider
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract override val classKind: ClassKind
|
||||
abstract override val declarations: List<FirDeclaration>
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val scopeProvider: FirScopeProvider
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract val name: Name
|
||||
abstract override val symbol: FirRegularClassSymbol
|
||||
abstract val hasLazyNestedClassifiers: Boolean
|
||||
@@ -55,10 +55,10 @@ abstract class FirRegularClass : FirClass(), FirControlFlowGraphOwner {
|
||||
|
||||
abstract override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider)
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract fun replaceCompanionObjectSymbol(newCompanionObjectSymbol: FirRegularClassSymbol?)
|
||||
|
||||
abstract override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
|
||||
+6
-6
@@ -58,19 +58,19 @@ internal class FirAnonymousObjectImpl(
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
status.accept(visitor, data)
|
||||
controlFlowGraphReference?.accept(visitor, data)
|
||||
superTypeRefs.forEach { it.accept(visitor, data) }
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
controlFlowGraphReference?.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectImpl {
|
||||
transformTypeParameters(transformer, data)
|
||||
transformStatus(transformer, data)
|
||||
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
|
||||
transformSuperTypeRefs(transformer, data)
|
||||
transformDeclarations(transformer, data)
|
||||
transformAnnotations(transformer, data)
|
||||
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -111,6 +111,10 @@ internal class FirAnonymousObjectImpl(
|
||||
deprecationsProvider = newDeprecationsProvider
|
||||
}
|
||||
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
|
||||
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>) {
|
||||
superTypeRefs.clear()
|
||||
superTypeRefs.addAll(newSuperTypeRefs)
|
||||
@@ -119,8 +123,4 @@ internal class FirAnonymousObjectImpl(
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -64,9 +64,9 @@ internal class FirRegularClassImpl(
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeParameters.forEach { it.accept(visitor, data) }
|
||||
status.accept(visitor, data)
|
||||
controlFlowGraphReference?.accept(visitor, data)
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
controlFlowGraphReference?.accept(visitor, data)
|
||||
superTypeRefs.forEach { it.accept(visitor, data) }
|
||||
contextReceivers.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
@@ -74,9 +74,9 @@ internal class FirRegularClassImpl(
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRegularClassImpl {
|
||||
transformTypeParameters(transformer, data)
|
||||
transformStatus(transformer, data)
|
||||
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
|
||||
transformDeclarations(transformer, data)
|
||||
transformAnnotations(transformer, data)
|
||||
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
|
||||
transformSuperTypeRefs(transformer, data)
|
||||
contextReceivers.transformInplace(transformer, data)
|
||||
return this
|
||||
@@ -119,14 +119,14 @@ internal class FirRegularClassImpl(
|
||||
deprecationsProvider = newDeprecationsProvider
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceCompanionObjectSymbol(newCompanionObjectSymbol: FirRegularClassSymbol?) {
|
||||
companionObjectSymbol = newCompanionObjectSymbol
|
||||
}
|
||||
|
||||
@@ -178,12 +178,16 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
|
||||
override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitVariable(enumEntry, data)
|
||||
|
||||
override fun visitRegularClass(regularClass: FirRegularClass, data: D): R = visitClass(regularClass, data)
|
||||
|
||||
override fun visitFile(file: FirFile, data: D): R = visitDeclaration(file, data)
|
||||
|
||||
override fun visitScript(script: FirScript, data: D): R = visitDeclaration(script, data)
|
||||
|
||||
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression, data: D): R = visitExpression(anonymousFunctionExpression, data)
|
||||
|
||||
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R = visitClass(anonymousObject, data)
|
||||
|
||||
override fun visitAnonymousObjectExpression(anonymousObjectExpression: FirAnonymousObjectExpression, data: D): R = visitExpression(anonymousObjectExpression, data)
|
||||
|
||||
override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R = visitImport(resolvedImport, data)
|
||||
|
||||
@@ -178,12 +178,16 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitEnumEntry(enumEntry: FirEnumEntry) = visitVariable(enumEntry)
|
||||
|
||||
override fun visitRegularClass(regularClass: FirRegularClass) = visitClass(regularClass)
|
||||
|
||||
override fun visitFile(file: FirFile) = visitDeclaration(file)
|
||||
|
||||
override fun visitScript(script: FirScript) = visitDeclaration(script)
|
||||
|
||||
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression) = visitExpression(anonymousFunctionExpression)
|
||||
|
||||
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) = visitClass(anonymousObject)
|
||||
|
||||
override fun visitAnonymousObjectExpression(anonymousObjectExpression: FirAnonymousObjectExpression) = visitExpression(anonymousObjectExpression)
|
||||
|
||||
override fun visitResolvedImport(resolvedImport: FirResolvedImport) = visitImport(resolvedImport)
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
val classBuilder by builder {
|
||||
parents += declarationBuilder
|
||||
parents += annotationContainerBuilder
|
||||
fields from klass without listOf("symbol", "resolvePhase")
|
||||
fields from klass without listOf("symbol", "resolvePhase", "controlFlowGraphReference")
|
||||
}
|
||||
|
||||
builder(regularClass) {
|
||||
|
||||
+3
-3
@@ -51,8 +51,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val functionTypeParameter by element(Other, baseFirElement)
|
||||
|
||||
val classLikeDeclaration by sealedElement(Declaration, memberDeclaration, statement)
|
||||
val klass by sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
|
||||
val regularClass by element(Declaration, klass, controlFlowGraphOwner)
|
||||
val klass by sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner, controlFlowGraphOwner)
|
||||
val regularClass by element(Declaration, klass)
|
||||
val typeAlias by element(Declaration, classLikeDeclaration, typeParametersOwner)
|
||||
|
||||
val function by sealedElement(Declaration, callableDeclaration, targetElement, controlFlowGraphOwner, statement)
|
||||
@@ -69,7 +69,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val anonymousFunction by element(Declaration, function, typeParametersOwner, contractDescriptionOwner)
|
||||
val anonymousFunctionExpression by element(Expression, expression)
|
||||
|
||||
val anonymousObject by element(Declaration, klass, controlFlowGraphOwner)
|
||||
val anonymousObject by element(Declaration, klass)
|
||||
val anonymousObjectExpression by element(Expression, expression)
|
||||
|
||||
val diagnosticHolder by element(Diagnostics)
|
||||
|
||||
Reference in New Issue
Block a user