diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt index 41eeae0fe69..77fb8abe56a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt @@ -19,19 +19,19 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration, FirSymbolOwner { +abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration, FirSymbolOwner, FirControlFlowGraphOwner { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase abstract override val origin: FirDeclarationOrigin abstract override val attributes: FirDeclarationAttributes + abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract val body: FirBlock? abstract override val symbol: FirAnonymousInitializerSymbol - abstract val controlFlowGraphReference: FirControlFlowGraphReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousInitializer(this, data) abstract override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) - abstract fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousInitializer + abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousInitializer } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt index d7d9ad59f1a..b1376d45022 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirAnonymousObject : FirClass, FirExpression() { +abstract class FirAnonymousObject : FirClass, FirControlFlowGraphOwner, FirExpression() { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase @@ -33,9 +33,9 @@ abstract class FirAnonymousObject : FirClass, FirExpression( abstract override val declarations: List abstract override val annotations: List abstract override val scopeProvider: FirScopeProvider + abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract override val typeRef: FirTypeRef abstract override val symbol: FirAnonymousObjectSymbol - abstract val controlFlowGraphReference: FirControlFlowGraphReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousObject(this, data) @@ -51,5 +51,5 @@ abstract class FirAnonymousObject : FirClass, FirExpression( abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirAnonymousObject - abstract fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousObject + abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousObject } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirControlFlowGraphOwner.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirControlFlowGraphOwner.kt new file mode 100644 index 00000000000..2a000e5f983 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirControlFlowGraphOwner.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.declarations + +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirControlFlowGraphOwner : FirElement { + override val source: FirSourceElement? + val controlFlowGraphReference: FirControlFlowGraphReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitControlFlowGraphOwner(this, data) + + fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirControlFlowGraphOwner +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt index 11c1bdf10f6..10035a87538 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirFunction> : FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirStatement { +interface FirFunction> : FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement { override val source: FirSourceElement? override val session: FirSession override val resolvePhase: FirResolvePhase @@ -31,7 +31,7 @@ interface FirFunction> : FirCallableDeclaration, FirTarget override val returnTypeRef: FirTypeRef override val receiverTypeRef: FirTypeRef? override val typeParameters: List - val controlFlowGraphReference: FirControlFlowGraphReference + override val controlFlowGraphReference: FirControlFlowGraphReference override val symbol: FirFunctionSymbol val valueParameters: List val body: FirBlock? @@ -52,7 +52,7 @@ interface FirFunction> : FirCallableDeclaration, FirTarget override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirFunction - fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirFunction + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirFunction fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirProperty.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirProperty.kt index dbda8763350..4fb4c599414 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirProperty.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirProperty.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirProperty : FirVariable(), FirTypeParametersOwner, FirCallableMemberDeclaration { +abstract class FirProperty : FirVariable(), FirTypeParametersOwner, FirControlFlowGraphOwner, FirCallableMemberDeclaration { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase @@ -40,8 +40,8 @@ abstract class FirProperty : FirVariable(), FirTypeParametersOwner, abstract override val getter: FirPropertyAccessor? abstract override val setter: FirPropertyAccessor? abstract override val annotations: List + abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract override val containerSource: DeserializedContainerSource? - abstract val controlFlowGraphReference: FirControlFlowGraphReference abstract override val symbol: FirPropertySymbol abstract val backingFieldSymbol: FirBackingFieldSymbol abstract val isLocal: Boolean @@ -70,7 +70,7 @@ abstract class FirProperty : FirVariable(), FirTypeParametersOwner, abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirProperty - abstract fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirProperty + abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirProperty abstract override fun transformStatus(transformer: FirTransformer, data: D): FirProperty diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt index b7cca436c82..a64d76e38eb 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration, FirTypeParameterRefsOwner, FirClass { +abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirClass { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase @@ -31,6 +31,7 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration, abstract override val annotations: List abstract override val typeParameters: List abstract override val status: FirDeclarationStatus + abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract override val classKind: ClassKind abstract override val declarations: List abstract override val scopeProvider: FirScopeProvider @@ -39,7 +40,6 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration, abstract val companionObject: FirRegularClass? abstract val hasLazyNestedClassifiers: Boolean abstract override val superTypeRefs: List - abstract val controlFlowGraphReference: FirControlFlowGraphReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitRegularClass(this, data) @@ -51,11 +51,11 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration, abstract override fun transformStatus(transformer: FirTransformer, data: D): FirRegularClass + abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirRegularClass + abstract override fun transformDeclarations(transformer: FirTransformer, data: D): FirRegularClass abstract fun transformCompanionObject(transformer: FirTransformer, data: D): FirRegularClass abstract override fun transformSuperTypeRefs(transformer: FirTransformer, data: D): FirRegularClass - - abstract fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirRegularClass } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt index e3ded53007a..1b91517e672 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirValueParameter : FirVariable() { +abstract class FirValueParameter : FirVariable(), FirControlFlowGraphOwner { abstract override val source: FirSourceElement? abstract override val session: FirSession abstract override val resolvePhase: FirResolvePhase @@ -39,11 +39,11 @@ abstract class FirValueParameter : FirVariable() { abstract override val getter: FirPropertyAccessor? abstract override val setter: FirPropertyAccessor? abstract override val annotations: List + abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract val defaultValue: FirExpression? abstract val isCrossinline: Boolean abstract val isNoinline: Boolean abstract val isVararg: Boolean - abstract val controlFlowGraphReference: FirControlFlowGraphReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitValueParameter(this, data) @@ -67,7 +67,7 @@ abstract class FirValueParameter : FirVariable() { abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirValueParameter - abstract fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirValueParameter + abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirValueParameter abstract override fun transformOtherChildren(transformer: FirTransformer, data: D): FirValueParameter } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt index 6bcb4449281..8e54d1e8bdc 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt @@ -38,13 +38,13 @@ internal class FirAnonymousInitializerImpl( } override fun acceptChildren(visitor: FirVisitor, data: D) { - body?.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) + body?.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirAnonymousInitializerImpl { - body = body?.transformSingle(transformer, data) transformControlFlowGraphReference(transformer, data) + body = body?.transformSingle(transformer, data) return this } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt index a243d77bd6f..fbbfec431bd 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt @@ -53,8 +53,8 @@ internal class FirAnonymousObjectImpl( superTypeRefs.forEach { it.accept(visitor, data) } declarations.forEach { it.accept(visitor, data) } annotations.forEach { it.accept(visitor, data) } - typeRef.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) + typeRef.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirAnonymousObjectImpl { @@ -62,8 +62,8 @@ internal class FirAnonymousObjectImpl( transformSuperTypeRefs(transformer, data) transformDeclarations(transformer, data) transformAnnotations(transformer, data) - typeRef = typeRef.transformSingle(transformer, data) transformControlFlowGraphReference(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) return this } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt index a464a55a6ff..627e2a5ecae 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt @@ -65,8 +65,8 @@ internal class FirDefaultSetterValueParameter( getter?.accept(visitor, data) setter?.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } - defaultValue?.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) + defaultValue?.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt index bc59f3941b2..c93631b89aa 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt @@ -46,8 +46,8 @@ internal class FirRegularClassImpl( override val superTypeRefs: MutableList, ) : FirRegularClass() { override val attributes: FirDeclarationAttributes = FirDeclarationAttributes() - override val hasLazyNestedClassifiers: Boolean get() = false override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference + override val hasLazyNestedClassifiers: Boolean get() = false init { symbol.bind(this) @@ -57,19 +57,19 @@ internal class FirRegularClassImpl( annotations.forEach { it.accept(visitor, data) } typeParameters.forEach { it.accept(visitor, data) } status.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) declarations.forEach { it.accept(visitor, data) } superTypeRefs.forEach { it.accept(visitor, data) } - controlFlowGraphReference.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirRegularClassImpl { transformAnnotations(transformer, data) typeParameters.transformInplace(transformer, data) transformStatus(transformer, data) + transformControlFlowGraphReference(transformer, data) transformDeclarations(transformer, data) companionObject = declarations.asSequence().filterIsInstance().firstOrNull { it.status.isCompanion } transformSuperTypeRefs(transformer, data) - transformControlFlowGraphReference(transformer, data) return this } @@ -83,6 +83,11 @@ internal class FirRegularClassImpl( return this } + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirRegularClassImpl { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + override fun transformDeclarations(transformer: FirTransformer, data: D): FirRegularClassImpl { declarations.transformInplace(transformer, data) return this @@ -98,11 +103,6 @@ internal class FirRegularClassImpl( return this } - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirRegularClassImpl { - controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) - return this - } - override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { resolvePhase = newResolvePhase } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt index 9e757f8ba47..0200a7076ac 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt @@ -61,8 +61,8 @@ open class FirValueParameterImpl @FirImplementationDetail constructor( override fun acceptChildren(visitor: FirVisitor, data: D) { returnTypeRef.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } - defaultValue?.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) + defaultValue?.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirValueParameterImpl { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index 1ee95b097e3..d94da23bfe8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirControlFlowGraphOwner import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.declarations.FirDeclaration @@ -182,6 +183,10 @@ abstract class FirTransformer : FirVisitor { + return transformElement(controlFlowGraphOwner, data) + } + open fun transformStatement(statement: FirStatement, data: D): CompositeTransformResult { return transformElement(statement, data) } @@ -670,6 +675,10 @@ abstract class FirTransformer : FirVisitor { + return transformControlFlowGraphOwner(controlFlowGraphOwner, data) + } + final override fun visitStatement(statement: FirStatement, data: D): CompositeTransformResult { return transformStatement(statement, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index d377b80a9cd..bb0be62472a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirControlFlowGraphOwner import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.declarations.FirDeclaration @@ -158,6 +159,8 @@ abstract class FirVisitor { open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): R = visitElement(resolvedDeclarationStatus, data) + open fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: D): R = visitElement(controlFlowGraphOwner, data) + open fun visitStatement(statement: FirStatement, data: D): R = visitElement(statement, data) open fun visitExpression(expression: FirExpression, data: D): R = visitElement(expression, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index 88841d1bcfc..94b6ffc8240 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirControlFlowGraphOwner import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.declarations.FirDeclaration @@ -180,6 +181,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(resolvedDeclarationStatus) } + open fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner) { + visitElement(controlFlowGraphOwner) + } + open fun visitStatement(statement: FirStatement) { visitElement(statement) } @@ -668,6 +673,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitResolvedDeclarationStatus(resolvedDeclarationStatus) } + final override fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: Nothing?) { + visitControlFlowGraphOwner(controlFlowGraphOwner) + } + final override fun visitStatement(statement: FirStatement, data: Nothing?) { visitStatement(statement) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index db7330371c5..51929843c49 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -23,11 +23,13 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val declarationStatus = element("DeclarationStatus", Declaration) val resolvedDeclarationStatus = element("ResolvedDeclarationStatus", Declaration, declarationStatus) + val controlFlowGraphOwner = element("ControlFlowGraphOwner", Declaration) + val statement = element("Statement", Expression, annotationContainer) val expression = element("Expression", Expression, statement) val declaration = element("Declaration", Declaration) val annotatedDeclaration = element("AnnotatedDeclaration", Declaration, declaration, annotationContainer) - val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner) + val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner, controlFlowGraphOwner) val typedDeclaration = element("TypedDeclaration", Declaration, annotatedDeclaration) val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner) val typeParameterRef = element("TypeParameterRef", Declaration) @@ -38,17 +40,17 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val callableMemberDeclaration = element("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration) val variable = element("Variable", Declaration, callableDeclaration, annotatedDeclaration, statement) - val valueParameter = element("ValueParameter", Declaration, variable) - val property = element("Property", Declaration, variable, typeParametersOwner, callableMemberDeclaration) + val valueParameter = element("ValueParameter", Declaration, variable, controlFlowGraphOwner) + val property = element("Property", Declaration, variable, typeParametersOwner, controlFlowGraphOwner, callableMemberDeclaration) val field = element("Field", Declaration, variable, typeParametersOwner, callableMemberDeclaration) val enumEntry = element("EnumEntry", Declaration, variable, callableMemberDeclaration) val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement, symbolOwner) val klass = element("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner) - val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, klass) + val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, controlFlowGraphOwner, klass) val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner) - val function = element("Function", Declaration, callableDeclaration, targetElement, typeParameterRefsOwner, statement) + val function = element("Function", Declaration, callableDeclaration, targetElement, typeParameterRefsOwner, controlFlowGraphOwner, statement) val contractDescriptionOwner = element("ContractDescriptionOwner", Declaration) val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner) @@ -57,7 +59,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val file = element("File", Declaration, annotatedDeclaration) val anonymousFunction = element("AnonymousFunction", Declaration, function, expression, typeParametersOwner) - val anonymousObject = element("AnonymousObject", Declaration, klass, expression) + val anonymousObject = element("AnonymousObject", Declaration, klass, controlFlowGraphOwner, expression) val diagnosticHolder = element("DiagnosticHolder", Diagnostics) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index ba0ce7c190d..c2bfc1cc985 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -70,6 +70,10 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +field("diagnostic", coneDiagnosticType) } + controlFlowGraphOwner.configure { + +controlFlowGraphReferenceField + } + declaration.configure { +field("session", firSessionType) +field("resolvePhase", resolvePhaseType, withReplace = true).apply { isMutable = true } @@ -97,7 +101,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild function.configure { withArg("F", "FirFunction") parentArg(callableDeclaration, "F", "F") - +controlFlowGraphReferenceField +symbol("FirFunctionSymbol", "F") +fieldList(valueParameter, withReplace = true).withTransform() +body(nullable = true) @@ -243,13 +246,11 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +field("companionObject", regularClass, nullable = true).withTransform() +booleanField("hasLazyNestedClassifiers") +superTypeRefs(withReplace = true) - +controlFlowGraphReferenceField } anonymousObject.configure { parentArg(klass, "F", anonymousObject) +symbol("FirAnonymousObjectSymbol") - +controlFlowGraphReferenceField } typeAlias.configure { @@ -298,7 +299,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild property.configure { parentArg(variable, "F", property) parentArg(callableMemberDeclaration, "F", property) - +controlFlowGraphReferenceField +symbol("FirPropertySymbol") +field("backingFieldSymbol", backingFieldSymbolType) +booleanField("isLocal") @@ -351,7 +351,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild parentArg(variable, "F", valueParameter) +field("defaultValue", expression, nullable = true) generateBooleanFields("crossinline", "noinline", "vararg") - +controlFlowGraphReferenceField } variable.configure { @@ -388,7 +387,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild parentArg(symbolOwner, "E", anonymousInitializer) +body(nullable = true) +symbol(anonymousInitializerSymbolType.type) - +controlFlowGraphReferenceField } file.configure {