[FIR] Introduce FirDeclarationAttributes for FirDeclaration

This commit is contained in:
Dmitriy Novozhilov
2020-05-07 17:29:21 +03:00
parent b348ae689a
commit 239837fd14
71 changed files with 181 additions and 9 deletions
@@ -57,6 +57,8 @@ class FirJavaClass @FirImplementationDetail internal constructor(
override val origin: FirDeclarationOrigin
get() = FirDeclarationOrigin.Java
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val companionObject: FirRegularClass?
get() = null
@@ -54,6 +54,8 @@ class FirJavaConstructor @FirImplementationDetail constructor(
override val origin: FirDeclarationOrigin
get() = FirDeclarationOrigin.Java
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val controlFlowGraphReference: FirControlFlowGraphReference get() = FirEmptyControlFlowGraphReference
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
@@ -56,6 +56,8 @@ class FirJavaField @FirImplementationDetail constructor(
override val origin: FirDeclarationOrigin
get() = FirDeclarationOrigin.Java
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirField {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
return this
@@ -27,6 +27,7 @@ abstract class FirAnonymousFunction : FirFunction<FirAnonymousFunction>, FirExpr
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val annotations: List<FirAnnotationCall>
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
@@ -24,6 +24,7 @@ abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaratio
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract val body: FirBlock?
abstract override val symbol: FirAnonymousInitializerSymbol
abstract val controlFlowGraphReference: FirControlFlowGraphReference
@@ -26,6 +26,7 @@ abstract class FirAnonymousObject : FirClass<FirAnonymousObject>, FirExpression(
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val typeParameters: List<FirTypeParameterRef>
abstract override val classKind: ClassKind
abstract override val superTypeRefs: List<FirTypeRef>
@@ -23,6 +23,7 @@ interface FirCallableDeclaration<F : FirCallableDeclaration<F>> : FirTypedDeclar
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
override val returnTypeRef: FirTypeRef
val receiverTypeRef: FirTypeRef?
@@ -23,6 +23,7 @@ interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : Fi
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
override val returnTypeRef: FirTypeRef
override val receiverTypeRef: FirTypeRef?
@@ -26,6 +26,7 @@ interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement,
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val typeParameters: List<FirTypeParameterRef>
override val symbol: FirClassSymbol<F>
val classKind: ClassKind
@@ -23,6 +23,7 @@ interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirDeclarati
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
override val symbol: FirClassLikeSymbol<F>
@@ -27,6 +27,7 @@ abstract class FirConstructor : FirPureAbstractElement(), FirFunction<FirConstru
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val typeParameters: List<FirTypeParameterRef>
@@ -20,6 +20,7 @@ interface FirDeclaration : FirElement {
val session: FirSession
val resolvePhase: FirResolvePhase
val origin: FirDeclarationOrigin
val attributes: FirDeclarationAttributes
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDeclaration(this, data)
@@ -26,6 +26,7 @@ abstract class FirEnumEntry : FirVariable<FirEnumEntry>(), FirCallableMemberDecl
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val name: Name
@@ -27,6 +27,7 @@ abstract class FirErrorFunction : FirPureAbstractElement(), FirFunction<FirError
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val annotations: List<FirAnnotationCall>
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
@@ -26,6 +26,7 @@ abstract class FirField : FirVariable<FirField>(), FirTypeParametersOwner, FirCa
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val name: Name
@@ -24,6 +24,7 @@ abstract class FirFile : FirPureAbstractElement(), FirAnnotationContainer, FirDe
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract val imports: List<FirImport>
abstract val declarations: List<FirDeclaration>
abstract val name: String
@@ -27,6 +27,7 @@ interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirTarget
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
override val returnTypeRef: FirTypeRef
override val receiverTypeRef: FirTypeRef?
@@ -21,6 +21,7 @@ interface FirMemberDeclaration : FirDeclaration, FirAnnotationContainer {
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
val typeParameters: List<FirTypeParameterRef>
val status: FirDeclarationStatus
@@ -28,6 +28,7 @@ abstract class FirProperty : FirVariable<FirProperty>(), FirTypeParametersOwner,
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val name: Name
@@ -26,6 +26,7 @@ abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPr
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
@@ -27,6 +27,7 @@ abstract class FirRegularClass : FirPureAbstractElement(), FirMemberDeclaration,
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeParameters: List<FirTypeParameterRef>
abstract override val status: FirDeclarationStatus
@@ -27,6 +27,7 @@ abstract class FirSealedClass : FirRegularClass() {
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeParameters: List<FirTypeParameterRef>
abstract override val status: FirDeclarationStatus
@@ -28,6 +28,7 @@ abstract class FirSimpleFunction : FirPureAbstractElement(), FirFunction<FirSimp
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
@@ -24,6 +24,7 @@ abstract class FirTypeAlias : FirPureAbstractElement(), FirClassLikeDeclaration<
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val status: FirDeclarationStatus
abstract override val typeParameters: List<FirTypeParameter>
abstract val name: Name
@@ -27,6 +27,7 @@ abstract class FirTypeParameter : FirPureAbstractElement(), FirTypeParameterRef,
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract val name: Name
abstract override val symbol: FirTypeParameterSymbol
abstract val variance: Variance
@@ -22,6 +22,7 @@ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
val returnTypeRef: FirTypeRef
@@ -25,6 +25,7 @@ abstract class FirValueParameter : FirVariable<FirValueParameter>() {
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract override val name: Name
@@ -27,6 +27,7 @@ abstract class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCa
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val returnTypeRef: FirTypeRef
abstract override val receiverTypeRef: FirTypeRef?
abstract val name: Name
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
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.FirTypeParameter
@@ -10,6 +10,7 @@ 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.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.impl.FirAnonymousInitializerImpl
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
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
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirField
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirFile
import org.jetbrains.kotlin.fir.declarations.FirImport
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirProperty
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
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.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
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.FirTypeParameter
@@ -44,6 +45,7 @@ internal class FirAnonymousFunctionImpl(
override val typeParameters: MutableList<FirTypeParameter>,
) : FirAnonymousFunction() {
override var resolvePhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
init {
symbol.bind(this)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.expressions.FirBlock
@@ -29,6 +30,7 @@ internal class FirAnonymousInitializerImpl(
override var body: FirBlock?,
override val symbol: FirAnonymousInitializerSymbol,
) : FirAnonymousInitializer() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init {
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
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
@@ -40,6 +41,7 @@ internal class FirAnonymousObjectImpl(
override var typeRef: FirTypeRef,
override val symbol: FirAnonymousObjectSymbol,
) : FirAnonymousObject() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init {
@@ -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.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -44,6 +45,7 @@ internal class FirClassImpl(
override var companionObject: FirRegularClass?,
override val superTypeRefs: MutableList<FirTypeRef>,
) : FirRegularClass() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val hasLazyNestedClassifiers: Boolean get() = false
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -44,6 +45,7 @@ internal class FirConstructorImpl(
override var delegatedConstructor: FirDelegatedConstructorCall?,
override var body: FirBlock?,
) : FirConstructor() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override val isPrimary: Boolean get() = false
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -45,6 +46,7 @@ internal class FirDefaultSetterValueParameter(
override val isNoinline: Boolean,
override val isVararg: Boolean,
) : FirValueParameter() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val name: Name = Name.identifier("value")
init {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
@@ -41,6 +42,7 @@ internal class FirEnumEntryImpl(
override var status: FirDeclarationStatus,
override val containerSource: DeserializedContainerSource?,
) : FirEnumEntry() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val receiverTypeRef: FirTypeRef? get() = null
override val delegate: FirExpression? get() = null
override val delegateFieldSymbol: FirDelegateFieldSymbol<FirEnumEntry>? get() = null
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -38,6 +39,7 @@ internal class FirErrorFunctionImpl(
override val symbol: FirErrorFunctionSymbol,
override val typeParameters: MutableList<FirTypeParameter>,
) : FirErrorFunction() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var returnTypeRef: FirTypeRef = FirErrorTypeRefImpl(null, diagnostic)
override val receiverTypeRef: FirTypeRef? get() = null
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirField
@@ -41,6 +42,7 @@ internal class FirFieldImpl(
override var status: FirDeclarationStatus,
override val containerSource: DeserializedContainerSource?,
) : FirField() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val receiverTypeRef: FirTypeRef? get() = null
override val initializer: FirExpression? get() = null
override val delegate: FirExpression? get() = null
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.FirFile
import org.jetbrains.kotlin.fir.declarations.FirImport
@@ -32,6 +33,8 @@ internal class FirFileImpl(
override val name: String,
override val packageFqName: FqName,
) : FirFile() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
imports.forEach { it.accept(visitor, data) }
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -44,6 +45,7 @@ internal class FirPrimaryConstructor(
override var delegatedConstructor: FirDelegatedConstructorCall?,
override var body: FirBlock?,
) : FirConstructor() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override val isPrimary: Boolean get() = true
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
@@ -44,6 +45,7 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>,
) : FirPropertyAccessor() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val receiverTypeRef: FirTypeRef? get() = null
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override val isSetter: Boolean get() = !isGetter
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirProperty
@@ -51,6 +52,7 @@ internal class FirPropertyImpl(
override val typeParameters: MutableList<FirTypeParameter>,
override var status: FirDeclarationStatus,
) : FirProperty() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val isVal: Boolean get() = !isVar
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override val backingFieldSymbol: FirBackingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
@@ -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.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -47,6 +48,7 @@ internal class FirSealedClassImpl(
override val superTypeRefs: MutableList<FirTypeRef>,
override val inheritors: MutableList<ClassId>,
) : FirSealedClass() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val hasLazyNestedClassifiers: Boolean get() = false
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -47,6 +48,7 @@ open class FirSimpleFunctionImpl @FirImplementationDetail constructor(
override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>,
) : FirSimpleFunction() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
init {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -35,6 +36,8 @@ internal class FirTypeAliasImpl(
override var expandedTypeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
) : FirTypeAlias() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
init {
symbol.bind(this)
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.FirTypeParameter
@@ -34,6 +35,8 @@ internal class FirTypeParameterImpl(
override val bounds: MutableList<FirTypeRef>,
override val annotations: MutableList<FirAnnotationCall>,
) : FirTypeParameter() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
init {
symbol.bind(this)
}
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -39,6 +40,7 @@ open class FirValueParameterImpl @FirImplementationDetail constructor(
override val isNoinline: Boolean,
override val isVararg: Boolean,
) : FirValueParameter() {
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
override val receiverTypeRef: FirTypeRef? get() = null
override val initializer: FirExpression? get() = null
override val delegate: FirExpression? get() = null
@@ -0,0 +1,52 @@
/*
* 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.utils.AttributeArrayOwner
import org.jetbrains.kotlin.fir.utils.NullableArrayMapAccessor
import org.jetbrains.kotlin.fir.utils.TypeRegistry
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
abstract class FirDeclarationDataKey
class FirDeclarationAttributes : AttributeArrayOwner<FirDeclarationDataKey, Any>() {
override val typeRegistry: TypeRegistry<FirDeclarationDataKey, Any>
get() = FirDeclarationDataRegistry
internal operator fun set(key: KClass<out FirDeclarationDataKey>, value: Any) {
registerComponent(key, value)
}
}
/*
* Example of adding new attribute for declaration:
*
* object SomeKey : FirDeclarationDataKey()
* var FirDeclaration.someString: String? by FirDeclarationDataRegistry.data(SomeKey)
*/
object FirDeclarationDataRegistry : TypeRegistry<FirDeclarationDataKey, Any>() {
fun <K : FirDeclarationDataKey, V : Any> data(key: K): ReadWriteProperty<FirDeclaration, V?> {
val kClass = key::class
return DeclarationDataAccessor(generateNullableAccessor(kClass), kClass)
}
private class DeclarationDataAccessor<V : Any>(
val dataAccessor: NullableArrayMapAccessor<FirDeclarationDataKey, Any, V>,
val key: KClass<out FirDeclarationDataKey>
) : ReadWriteProperty<FirDeclaration, V?> {
override fun getValue(thisRef: FirDeclaration, property: KProperty<*>): V? {
return dataAccessor.getValue(thisRef.attributes, property)
}
override fun setValue(thisRef: FirDeclaration, property: KProperty<*>, value: V?) {
if (value != null) {
thisRef.attributes[key] = value
}
}
}
}
@@ -71,6 +71,8 @@ class FirSyntheticProperty(
override val controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override val attributes: FirDeclarationAttributes = FirDeclarationAttributes()
// ???
override val backingFieldSymbol: FirBackingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
@@ -60,6 +60,9 @@ class FirSyntheticPropertyAccessor(
override val body: FirBlock?
get() = delegate.body
override val attributes: FirDeclarationAttributes
get() = delegate.attributes
override val symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol().apply {
bind(this@FirSyntheticPropertyAccessor)
}
@@ -6,10 +6,7 @@
package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractBuilderConfigurator
import org.jetbrains.kotlin.fir.tree.generator.model.Element
import org.jetbrains.kotlin.fir.tree.generator.model.Field
import org.jetbrains.kotlin.fir.tree.generator.model.Implementation
import org.jetbrains.kotlin.fir.tree.generator.model.LeafBuilder
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.util.traverseParents
object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTreeBuilder) {
@@ -32,13 +29,13 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val classBuilder by builder {
parents += annotationContainerBuilder
fields from klass without listOf("symbol", "resolvePhase")
fields from klass without listOf("symbol", "resolvePhase", "attributes")
}
val regularClassBuilder by builder("AbstractFirRegularClassBuilder") {
parents += classBuilder
parents += typeParameterRefsOwnerBuilder
fields from regularClass
fields from regularClass without "attributes"
}
val qualifiedAccessBuilder by builder {
@@ -55,7 +52,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val functionBuilder by builder {
parents += annotationContainerBuilder
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters")
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters", "attributes")
}
val loopJumpBuilder by builder {
@@ -64,7 +61,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val abstractConstructorBuilder by builder {
parents += functionBuilder
fields from constructor without "isPrimary"
fields from constructor without listOf("isPrimary", "attributes")
}
for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl")) {
@@ -330,6 +327,13 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
) {
defaultNull(it)
}
// configureFieldInAllIntermediateBuilders(
// field = "attributes",
// fieldPredicate = { it.type == declarationAttributesType.type }
// ) {
//
// }
}
private inline fun findImplementationsWithElementInParents(
@@ -364,4 +368,18 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
}
private fun configureFieldInAllIntermediateBuilders(
field: String,
builderPredicate: ((IntermediateBuilder) -> Boolean)? = null,
fieldPredicate: ((Field) -> Boolean)? = null,
init: IntermediateBuilderConfigurationContext.(field: String) -> Unit
) {
for (builder in FirTreeBuilder.intermediateBuilders) {
if (builderPredicate != null && !builderPredicate(builder)) continue
if (!builder.allFields.any { it.name == field }) continue
if (fieldPredicate != null && !fieldPredicate(builder[field])) continue
IntermediateBuilderConfigurationContext(builder).init(field)
}
}
}
@@ -494,5 +494,12 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
default(it, "FirImplicitTypeRefImpl(null)")
useTypes(implicitTypeRefType)
}
configureFieldInAllImplementations(
field = "attributes",
fieldPredicate = { it.type == declarationAttributesType.type }
) {
default(it, "${declarationAttributesType.type}()")
}
}
}
@@ -74,6 +74,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("session", firSessionType)
+field("resolvePhase", resolvePhaseType, withReplace = true).apply { isMutable = true }
+field("origin", declarationOriginType)
+field("attributes", declarationAttributesType)
}
typedDeclaration.configure {
@@ -70,4 +70,5 @@ val coneStubDiagnosticType = generatedType("diagnostics", "ConeStubDiagnostic")
val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl")
val firImplementationDetailType = generatedType("FirImplementationDetail")
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
val declarationAttributesType = generatedType("declarations", "FirDeclarationAttributes")