FIR: introduce FirDeclarationBuilder as a base class for all FIR declaration builders

This commit is contained in:
Ilya Kirillov
2021-04-19 20:41:48 +02:00
committed by TeamCityServer
parent da6c5e13d5
commit a76c5d66eb
15 changed files with 97 additions and 38 deletions
@@ -195,7 +195,7 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder,
lateinit var visibility: Visibility
var modality: Modality? = null
var isStatic: Boolean by Delegates.notNull()
var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
lateinit var annotationBuilder: () -> List<FirAnnotationCall>
@Deprecated("Modification of 'origin' has no impact for FirJavaFunctionBuilder", level = DeprecationLevel.HIDDEN)
@@ -34,14 +34,14 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
@FirBuilderDsl
interface FirAbstractConstructorBuilder : FirFunctionBuilder {
abstract override var source: FirSourceElement?
abstract override val annotations: MutableList<FirAnnotationCall>
abstract override var session: FirSession
abstract override var resolvePhase: FirResolvePhase
abstract override var origin: FirDeclarationOrigin
abstract override var attributes: FirDeclarationAttributes
abstract override val annotations: MutableList<FirAnnotationCall>
abstract override var returnTypeRef: FirTypeRef
abstract override val valueParameters: MutableList<FirValueParameter>
abstract override var body: FirBlock?
abstract var resolvePhase: FirResolvePhase
abstract var receiverTypeRef: FirTypeRef?
abstract val typeParameters: MutableList<FirTypeParameterRef>
abstract var controlFlowGraphReference: FirControlFlowGraphReference?
@@ -77,6 +77,13 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu
)
}
@Deprecated("Modification of 'resolvePhase' has no impact for FirAnonymousFunctionBuilder", level = DeprecationLevel.HIDDEN)
override var resolvePhase: FirResolvePhase
get() = throw IllegalStateException()
set(_) {
throw IllegalStateException()
}
}
@OptIn(ExperimentalContracts::class)
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousInitializerImpl
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -25,16 +26,16 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
class FirAnonymousInitializerBuilder {
var source: FirSourceElement? = null
lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
lateinit var origin: FirDeclarationOrigin
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
class FirAnonymousInitializerBuilder : FirDeclarationBuilder {
override var source: FirSourceElement? = null
override lateinit var session: FirSession
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
var body: FirBlock? = null
var symbol: FirAnonymousInitializerSymbol = FirAnonymousInitializerSymbol()
fun build(): FirAnonymousInitializer {
override fun build(): FirAnonymousInitializer {
return FirAnonymousInitializerImpl(
source,
session,
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.builder.FirClassBuilder
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousObjectImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
@@ -34,10 +35,10 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
class FirAnonymousObjectBuilder : FirClassBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
class FirAnonymousObjectBuilder : FirDeclarationBuilder, FirClassBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val typeParameters: MutableList<FirTypeParameterRef> = mutableListOf()
@@ -14,7 +14,9 @@ import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -26,12 +28,13 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
interface FirClassBuilder : FirAnnotationContainerBuilder {
interface FirClassBuilder : FirDeclarationBuilder, FirAnnotationContainerBuilder {
abstract override var source: FirSourceElement?
abstract override var session: FirSession
abstract override var resolvePhase: FirResolvePhase
abstract override var origin: FirDeclarationOrigin
abstract override var attributes: FirDeclarationAttributes
abstract override val annotations: MutableList<FirAnnotationCall>
abstract var session: FirSession
abstract var origin: FirDeclarationOrigin
abstract var attributes: FirDeclarationAttributes
abstract val typeParameters: MutableList<FirTypeParameterRef>
abstract var classKind: ClassKind
abstract val superTypeRefs: MutableList<FirTypeRef>
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2021 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.builder
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
@FirBuilderDsl
interface FirDeclarationBuilder {
abstract var source: FirSourceElement?
abstract var session: FirSession
abstract var resolvePhase: FirResolvePhase
abstract var origin: FirDeclarationOrigin
abstract var attributes: FirDeclarationAttributes
fun build(): FirDeclaration
}
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.FirField
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -35,12 +36,12 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
*/
@FirBuilderDsl
open class FirFieldBuilder : FirAnnotationContainerBuilder {
open class FirFieldBuilder : FirDeclarationBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
open lateinit var session: FirSession
open var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
open lateinit var origin: FirDeclarationOrigin
open var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override lateinit var session: FirSession
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
open lateinit var returnTypeRef: FirTypeRef
open lateinit var name: Name
open lateinit var symbol: FirVariableSymbol<FirField>
@@ -12,7 +12,9 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -24,12 +26,13 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
interface FirFunctionBuilder : FirAnnotationContainerBuilder {
interface FirFunctionBuilder : FirDeclarationBuilder, FirAnnotationContainerBuilder {
abstract override var source: FirSourceElement?
abstract override var session: FirSession
abstract override var resolvePhase: FirResolvePhase
abstract override var origin: FirDeclarationOrigin
abstract override var attributes: FirDeclarationAttributes
abstract override val annotations: MutableList<FirAnnotationCall>
abstract var session: FirSession
abstract var origin: FirDeclarationOrigin
abstract var attributes: FirDeclarationAttributes
abstract var returnTypeRef: FirTypeRef
abstract val valueParameters: MutableList<FirValueParameter>
abstract var body: FirBlock?
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override lateinit var returnTypeRef: FirTypeRef
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParametersOwnerBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -37,12 +38,12 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
*/
@FirBuilderDsl
class FirPropertyBuilder : FirTypeParametersOwnerBuilder, FirAnnotationContainerBuilder {
class FirPropertyBuilder : FirDeclarationBuilder, FirTypeParametersOwnerBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
lateinit var origin: FirDeclarationOrigin
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override lateinit var session: FirSession
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
lateinit var returnTypeRef: FirTypeRef
var receiverTypeRef: FirTypeRef? = null
lateinit var name: Name
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.name.Name
open class FirRegularClassBuilder : FirClassBuilder, FirTypeParameterRefsOwnerBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override lateinit var session: FirSession
open var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override lateinit var session: FirSession
open var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override lateinit var returnTypeRef: FirTypeRef
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParametersOwnerBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeAliasImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -30,12 +31,12 @@ import org.jetbrains.kotlin.name.Name
*/
@FirBuilderDsl
class FirTypeAliasBuilder : FirTypeParametersOwnerBuilder, FirAnnotationContainerBuilder {
class FirTypeAliasBuilder : FirDeclarationBuilder, FirTypeParametersOwnerBuilder, FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
lateinit var origin: FirDeclarationOrigin
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override lateinit var session: FirSession
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var origin: FirDeclarationOrigin
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
lateinit var status: FirDeclarationStatus
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
lateinit var name: Name
@@ -11,6 +11,10 @@ import org.jetbrains.kotlin.fir.tree.generator.util.traverseParents
object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTreeBuilder) {
fun configureBuilders() = with(firTreeBuilder) {
val declarationBuilder by builder {
fields from declaration
}
val annotationContainerBuilder by builder {
fields from annotationContainer
}
@@ -28,6 +32,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
val classBuilder by builder {
parents += declarationBuilder
parents += annotationContainerBuilder
fields from klass without listOf("symbol", "resolvePhase")
}
@@ -53,6 +58,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
val functionBuilder by builder {
parents += declarationBuilder
parents += annotationContainerBuilder
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters")
}
@@ -86,15 +92,18 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
builder(field) {
parents += declarationBuilder
default("resolvePhase", "FirResolvePhase.DECLARATIONS")
openBuilder()
}
builder(anonymousObject) {
parents += declarationBuilder
parents += classBuilder
}
builder(typeAlias) {
parents += declarationBuilder
parents += typeParametersOwnerBuilder
withCopy()
}
@@ -180,6 +189,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
builder(property) {
parents += declarationBuilder
parents += typeParametersOwnerBuilder
defaultNull("getter", "setter", "containerSource", "delegateFieldSymbol")
default("resolvePhase", "FirResolvePhase.RAW_FIR")
@@ -289,6 +299,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
builder(anonymousInitializer) {
parents += declarationBuilder
default("symbol", "FirAnonymousInitializerSymbol()")
}