[FIR] move file annotations to the FirFileAnnotationsContainer
This commit is contained in:
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
@@ -27,6 +28,7 @@ abstract class FirFile : FirDeclaration() {
|
||||
abstract override val moduleData: FirModuleData
|
||||
abstract override val origin: FirDeclarationOrigin
|
||||
abstract override val attributes: FirDeclarationAttributes
|
||||
abstract val annotationsContainer: FirFileAnnotationsContainer
|
||||
abstract val packageDirective: FirPackageDirective
|
||||
abstract val imports: List<FirImport>
|
||||
abstract val declarations: List<FirDeclaration>
|
||||
@@ -45,6 +47,8 @@ abstract class FirFile : FirDeclaration() {
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFile
|
||||
|
||||
abstract fun <D> transformAnnotationsContainer(transformer: FirTransformer<D>, data: D): FirFile
|
||||
|
||||
abstract fun <D> transformImports(transformer: FirTransformer<D>, data: D): FirFile
|
||||
|
||||
abstract fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirFile
|
||||
|
||||
+8
-2
@@ -11,6 +11,7 @@ import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
@@ -35,34 +36,39 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
class FirFileBuilder : FirAnnotationContainerBuilder {
|
||||
override var source: KtSourceElement? = null
|
||||
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
lateinit var moduleData: FirModuleData
|
||||
lateinit var origin: FirDeclarationOrigin
|
||||
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
||||
lateinit var annotationsContainer: FirFileAnnotationsContainer
|
||||
lateinit var packageDirective: FirPackageDirective
|
||||
val imports: MutableList<FirImport> = mutableListOf()
|
||||
val declarations: MutableList<FirDeclaration> = mutableListOf()
|
||||
lateinit var name: String
|
||||
var sourceFile: KtSourceFile? = null
|
||||
var sourceFileLinesMapping: KtSourceFileLinesMapping? = null
|
||||
lateinit var symbol: FirFileSymbol
|
||||
|
||||
override fun build(): FirFile {
|
||||
return FirFileImpl(
|
||||
source,
|
||||
resolvePhase,
|
||||
annotations,
|
||||
moduleData,
|
||||
origin,
|
||||
attributes,
|
||||
annotationsContainer,
|
||||
packageDirective,
|
||||
imports,
|
||||
declarations,
|
||||
name,
|
||||
sourceFile,
|
||||
sourceFileLinesMapping,
|
||||
symbol,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Deprecated("Modification of 'annotations' has no impact for FirFileBuilder", level = DeprecationLevel.HIDDEN)
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
|
||||
@@ -10,6 +10,7 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
@@ -31,32 +32,33 @@ internal class FirFileImpl(
|
||||
override val source: KtSourceElement?,
|
||||
@Volatile
|
||||
override var resolvePhase: FirResolvePhase,
|
||||
override val annotations: MutableList<FirAnnotation>,
|
||||
override val moduleData: FirModuleData,
|
||||
override val origin: FirDeclarationOrigin,
|
||||
override val attributes: FirDeclarationAttributes,
|
||||
override var annotationsContainer: FirFileAnnotationsContainer,
|
||||
override var packageDirective: FirPackageDirective,
|
||||
override val imports: MutableList<FirImport>,
|
||||
override val declarations: MutableList<FirDeclaration>,
|
||||
override val name: String,
|
||||
override val sourceFile: KtSourceFile?,
|
||||
override val sourceFileLinesMapping: KtSourceFileLinesMapping?,
|
||||
override val symbol: FirFileSymbol,
|
||||
) : FirFile() {
|
||||
override val symbol: FirFileSymbol = FirFileSymbol()
|
||||
override val annotations: List<FirAnnotation> get() = annotationsContainer.annotations
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
annotationsContainer.accept(visitor, data)
|
||||
packageDirective.accept(visitor, data)
|
||||
imports.forEach { it.accept(visitor, data) }
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFileImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
transformAnnotationsContainer(transformer, data)
|
||||
packageDirective = packageDirective.transform(transformer, data)
|
||||
transformImports(transformer, data)
|
||||
transformDeclarations(transformer, data)
|
||||
@@ -64,7 +66,11 @@ internal class FirFileImpl(
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFileImpl {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotationsContainer(transformer: FirTransformer<D>, data: D): FirFileImpl {
|
||||
annotationsContainer = annotationsContainer.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user