[FIR] introduce FirFileAnnotationsContainer
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 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
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class FirFileAnnotationsContainer : FirElementWithResolvePhase(), FirAnnotationContainer {
|
||||||
|
abstract override val source: KtSourceElement?
|
||||||
|
abstract override val resolvePhase: FirResolvePhase
|
||||||
|
abstract override val moduleData: FirModuleData
|
||||||
|
abstract override val annotations: List<FirAnnotation>
|
||||||
|
abstract val containingFileSymbol: FirFileSymbol
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFileAnnotationsContainer(this, data)
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||||
|
transformer.transformFileAnnotationsContainer(this, data) as E
|
||||||
|
|
||||||
|
abstract override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||||
|
|
||||||
|
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFileAnnotationsContainer
|
||||||
|
}
|
||||||
+53
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("DuplicatedCode")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.builder
|
||||||
|
|
||||||
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.impl.FirFileAnnotationsContainerImpl
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
@FirBuilderDsl
|
||||||
|
class FirFileAnnotationsContainerBuilder : FirAnnotationContainerBuilder {
|
||||||
|
override var source: KtSourceElement? = null
|
||||||
|
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||||
|
lateinit var moduleData: FirModuleData
|
||||||
|
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||||
|
lateinit var containingFileSymbol: FirFileSymbol
|
||||||
|
|
||||||
|
override fun build(): FirFileAnnotationsContainer {
|
||||||
|
return FirFileAnnotationsContainerImpl(
|
||||||
|
source,
|
||||||
|
resolvePhase,
|
||||||
|
moduleData,
|
||||||
|
annotations,
|
||||||
|
containingFileSymbol,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class)
|
||||||
|
inline fun buildFileAnnotationsContainer(init: FirFileAnnotationsContainerBuilder.() -> Unit): FirFileAnnotationsContainer {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
return FirFileAnnotationsContainerBuilder().apply(init).build()
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("DuplicatedCode")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
internal class FirFileAnnotationsContainerImpl(
|
||||||
|
override val source: KtSourceElement?,
|
||||||
|
@Volatile
|
||||||
|
override var resolvePhase: FirResolvePhase,
|
||||||
|
override val moduleData: FirModuleData,
|
||||||
|
override val annotations: MutableList<FirAnnotation>,
|
||||||
|
override val containingFileSymbol: FirFileSymbol,
|
||||||
|
) : FirFileAnnotationsContainer() {
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFileAnnotationsContainerImpl {
|
||||||
|
transformAnnotations(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFileAnnotationsContainerImpl {
|
||||||
|
annotations.transformInplace(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||||
|
resolvePhase = newResolvePhase
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
||||||
@@ -207,6 +208,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
|||||||
return transformElement(elementWithResolvePhase, data)
|
return transformElement(elementWithResolvePhase, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer, data: D): FirFileAnnotationsContainer {
|
||||||
|
return transformElement(fileAnnotationsContainer, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration {
|
open fun transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration {
|
||||||
return transformElement(declaration, data)
|
return transformElement(declaration, data)
|
||||||
}
|
}
|
||||||
@@ -767,6 +772,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
|||||||
return transformElementWithResolvePhase(elementWithResolvePhase, data)
|
return transformElementWithResolvePhase(elementWithResolvePhase, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer, data: D): FirFileAnnotationsContainer {
|
||||||
|
return transformFileAnnotationsContainer(fileAnnotationsContainer, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitDeclaration(declaration: FirDeclaration, data: D): FirDeclaration {
|
final override fun visitDeclaration(declaration: FirDeclaration, data: D): FirDeclaration {
|
||||||
return transformDeclaration(declaration, data)
|
return transformDeclaration(declaration, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
||||||
@@ -180,6 +181,8 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
|
|
||||||
open fun visitElementWithResolvePhase(elementWithResolvePhase: FirElementWithResolvePhase, data: D): R = visitElement(elementWithResolvePhase, data)
|
open fun visitElementWithResolvePhase(elementWithResolvePhase: FirElementWithResolvePhase, data: D): R = visitElement(elementWithResolvePhase, data)
|
||||||
|
|
||||||
|
open fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer, data: D): R = visitElement(fileAnnotationsContainer, data)
|
||||||
|
|
||||||
open fun visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, data)
|
open fun visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, data)
|
||||||
|
|
||||||
open fun visitTypeParameterRefsOwner(typeParameterRefsOwner: FirTypeParameterRefsOwner, data: D): R = visitElement(typeParameterRefsOwner, data)
|
open fun visitTypeParameterRefsOwner(typeParameterRefsOwner: FirTypeParameterRefsOwner, data: D): R = visitElement(typeParameterRefsOwner, data)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
|
||||||
@@ -206,6 +207,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(elementWithResolvePhase)
|
visitElement(elementWithResolvePhase)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer) {
|
||||||
|
visitElement(fileAnnotationsContainer)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitDeclaration(declaration: FirDeclaration) {
|
open fun visitDeclaration(declaration: FirDeclaration) {
|
||||||
visitElement(declaration)
|
visitElement(declaration)
|
||||||
}
|
}
|
||||||
@@ -766,6 +771,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElementWithResolvePhase(elementWithResolvePhase)
|
visitElementWithResolvePhase(elementWithResolvePhase)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer, data: Nothing?) {
|
||||||
|
visitFileAnnotationsContainer(fileAnnotationsContainer)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) {
|
final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) {
|
||||||
visitDeclaration(declaration)
|
visitDeclaration(declaration)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -30,6 +30,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val contextReceiver by element(Declaration)
|
val contextReceiver by element(Declaration)
|
||||||
|
|
||||||
val elementWithResolvePhase by element(Other)
|
val elementWithResolvePhase by element(Other)
|
||||||
|
val fileAnnotationsContainer by element(Other, elementWithResolvePhase, annotationContainer)
|
||||||
val declaration by sealedElement(Declaration, elementWithResolvePhase, annotationContainer)
|
val declaration by sealedElement(Declaration, elementWithResolvePhase, annotationContainer)
|
||||||
val typeParameterRefsOwner by sealedElement(Declaration)
|
val typeParameterRefsOwner by sealedElement(Declaration)
|
||||||
val typeParametersOwner by sealedElement(Declaration, typeParameterRefsOwner)
|
val typeParametersOwner by sealedElement(Declaration, typeParameterRefsOwner)
|
||||||
|
|||||||
+4
@@ -83,6 +83,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
shouldBeAbstractClass()
|
shouldBeAbstractClass()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileAnnotationsContainer.configure {
|
||||||
|
+field("containingFileSymbol", type("fir.symbols.impl", "FirFileSymbol"), argument = null)
|
||||||
|
}
|
||||||
|
|
||||||
declaration.configure {
|
declaration.configure {
|
||||||
+symbolWithPackage("fir.symbols", "FirBasedSymbol", "out FirDeclaration")
|
+symbolWithPackage("fir.symbols", "FirBasedSymbol", "out FirDeclaration")
|
||||||
+field("moduleData", firModuleDataType)
|
+field("moduleData", firModuleDataType)
|
||||||
|
|||||||
+1
@@ -113,6 +113,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
|
|||||||
!element.type.contains("Reference")
|
!element.type.contains("Reference")
|
||||||
&& !element.type.contains("ResolvedQualifier")
|
&& !element.type.contains("ResolvedQualifier")
|
||||||
&& !element.type.endsWith("Ref")
|
&& !element.type.endsWith("Ref")
|
||||||
|
&& !element.type.endsWith("AnnotationsContainer")
|
||||||
}?.let { symbolFields ->
|
}?.let { symbolFields ->
|
||||||
println("init {")
|
println("init {")
|
||||||
for (symbolField in symbolFields) {
|
for (symbolField in symbolFields) {
|
||||||
|
|||||||
Reference in New Issue
Block a user