[RAW FIR] Rename raw FIR builder types for clarity

This commit is contained in:
Kirill Rakhman
2023-06-26 12:53:53 +03:00
committed by Space Team
parent 26e9e9de11
commit 2cc588d6d8
20 changed files with 80 additions and 88 deletions
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
@@ -47,7 +47,7 @@ fun FirSession.buildFirViaLightTree(
fun FirSession.buildFirFromKtFiles(ktFiles: Collection<KtFile>): List<FirFile> {
val firProvider = (firProvider as FirProviderImpl)
val builder = RawFirBuilder(this, firProvider.kotlinScopeProvider)
val builder = PsiRawFirBuilder(this, firProvider.kotlinScopeProvider)
return ktFiles.map {
builder.buildFirFile(it).also { firFile ->
firProvider.recordFile(firFile)
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.dump.MultiModuleHtmlFirDump
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
@@ -35,12 +35,10 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveP
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import sun.management.ManagementFactoryHelper
import java.io.File
import java.io.FileOutputStream
import java.io.PrintStream
import java.lang.management.ManagementFactory
import java.text.DecimalFormat
private const val FAIL_FAST = true
@@ -139,7 +137,7 @@ class FirResolveModularizedTotalKotlinTest : AbstractFrontendModularizedTest() {
val lightTree2Fir = LightTree2Fir(session, firProvider.kotlinScopeProvider, diagnosticsReporter = null)
bench.buildFiles(lightTree2Fir, sourceFiles)
} else {
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
val builder = PsiRawFirBuilder(session, firProvider.kotlinScopeProvider)
bench.buildFiles(builder, sourceFiles.map { it as KtPsiSourceFile })
}
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.lightTree.converter.DeclarationsConverter
import org.jetbrains.kotlin.fir.lightTree.converter.LightTreeRawFirDeclarationBuilder
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.lexer.KotlinLexer
import org.jetbrains.kotlin.parsing.KotlinLightParser
@@ -87,7 +87,7 @@ class LightTree2Fir(
sourceFile: KtSourceFile,
linesMapping: KtSourceFileLinesMapping,
): FirFile {
return DeclarationsConverter(session, scopeProvider, lightTree)
return LightTreeRawFirDeclarationBuilder(session, scopeProvider, lightTree)
.convertFile(lightTree.root, sourceFile, linesMapping)
}
@@ -13,20 +13,19 @@ import com.intellij.util.diff.FlyweightCapableTreeStructure
import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.ElementTypeUtils.isExpression
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.BaseFirBuilder
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilder
import org.jetbrains.kotlin.fir.builder.Context
import org.jetbrains.kotlin.fir.builder.escapedStringToCharacter
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.lexer.KtToken
import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.name.Name
import kotlin.contracts.ExperimentalContracts
abstract class BaseConverter(
abstract class AbstractLightTreeRawFirBuilder(
baseSession: FirSession,
val tree: FlyweightCapableTreeStructure<LighterASTNode>,
context: Context<LighterASTNode> = Context()
) : BaseFirBuilder<LighterASTNode>(baseSession, context) {
) : AbstractRawFirBuilder<LighterASTNode>(baseSession, context) {
protected val implicitType = FirImplicitTypeRefImplWithoutSource
override fun LighterASTNode.toFirSourceElement(kind: KtFakeSourceElementKind?): KtLightSourceElement {
@@ -60,14 +60,14 @@ import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.addToStdlib.runUnless
class DeclarationsConverter(
class LightTreeRawFirDeclarationBuilder(
session: FirSession,
internal val baseScopeProvider: FirScopeProvider,
tree: FlyweightCapableTreeStructure<LighterASTNode>,
context: Context<LighterASTNode> = Context(),
) : BaseConverter(session, tree, context) {
) : AbstractLightTreeRawFirBuilder(session, tree, context) {
private val expressionConverter = ExpressionsConverter(session, tree, this, context)
private val expressionConverter = LightTreeRawFirExpressionBuilder(session, tree, this, context)
/**
* [org.jetbrains.kotlin.parsing.KotlinParsing.parseFile]
@@ -54,12 +54,12 @@ import org.jetbrains.kotlin.psi.stubs.elements.KtNameReferenceExpressionElementT
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.util.OperatorNameConventions
class ExpressionsConverter(
class LightTreeRawFirExpressionBuilder(
session: FirSession,
tree: FlyweightCapableTreeStructure<LighterASTNode>,
private val declarationsConverter: DeclarationsConverter,
private val declarationBuilder: LightTreeRawFirDeclarationBuilder,
context: Context<LighterASTNode> = Context(),
) : BaseConverter(session, tree, context) {
) : AbstractLightTreeRawFirBuilder(session, tree, context) {
inline fun <reified R : FirElement> getAsFirExpression(expression: LighterASTNode?, errorReason: String = ""): R {
val converted = expression?.let { convertExpression(it, errorReason) }
@@ -113,9 +113,9 @@ class ExpressionsConverter(
THIS_EXPRESSION -> convertThisExpression(expression)
SUPER_EXPRESSION -> convertSuperExpression(expression)
OBJECT_LITERAL -> declarationsConverter.convertObjectLiteral(expression)
FUN -> declarationsConverter.convertFunctionDeclaration(expression)
DESTRUCTURING_DECLARATION -> declarationsConverter.convertDestructingDeclaration(expression).toFirDestructingDeclaration(baseModuleData)
OBJECT_LITERAL -> declarationBuilder.convertObjectLiteral(expression)
FUN -> declarationBuilder.convertFunctionDeclaration(expression)
DESTRUCTURING_DECLARATION -> declarationBuilder.convertDestructingDeclaration(expression).toFirDestructingDeclaration(baseModuleData)
else -> buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.ExpressionExpected))
}
}
@@ -132,7 +132,7 @@ class ExpressionsConverter(
val functionSymbol = FirAnonymousFunctionSymbol()
lambdaExpression.getChildNodesByType(FUNCTION_LITERAL).first().forEachChildren {
when (it.tokenType) {
VALUE_PARAMETER_LIST -> valueParameterList += declarationsConverter.convertValueParameters(it, functionSymbol, ValueParameterDeclaration.LAMBDA)
VALUE_PARAMETER_LIST -> valueParameterList += declarationBuilder.convertValueParameters(it, functionSymbol, ValueParameterDeclaration.LAMBDA)
BLOCK -> block = it
ARROW -> hasArrow = true
}
@@ -188,7 +188,7 @@ class ExpressionsConverter(
}
body = if (block != null) {
declarationsConverter.convertBlockExpressionWithoutBuilding(block!!).apply {
declarationBuilder.convertBlockExpressionWithoutBuilding(block!!).apply {
statements.firstOrNull()?.let {
if (it.isContractBlockFirCheck()) {
this@buildAnonymousFunction.contractDescription = it.toLegacyRawContractDescription()
@@ -326,7 +326,7 @@ class ExpressionsConverter(
binaryExpression.forEachChildren {
when (it.tokenType) {
OPERATION_REFERENCE -> operationTokenName = it.asText
TYPE_REFERENCE -> firType = declarationsConverter.convertType(it)
TYPE_REFERENCE -> firType = declarationBuilder.convertType(it)
else -> if (it.isExpression()) leftArgAsFir = getAsFirExpression(it, "No left operand")
}
}
@@ -361,8 +361,8 @@ class ExpressionsConverter(
context.addNewLabel(pair.first)
errorLabelSource = pair.second
}
BLOCK -> firExpression = declarationsConverter.convertBlock(it)
PROPERTY -> firExpression = declarationsConverter.convertPropertyDeclaration(it)
BLOCK -> firExpression = declarationBuilder.convertBlock(it)
PROPERTY -> firExpression = declarationBuilder.convertPropertyDeclaration(it)
else -> if (it.isExpression()) firExpression = getAsFirExpression(it)
}
}
@@ -436,9 +436,9 @@ class ExpressionsConverter(
val firAnnotationList = mutableListOf<FirAnnotation>()
annotatedExpression.forEachChildren {
when (it.tokenType) {
ANNOTATION -> firAnnotationList += declarationsConverter.convertAnnotation(it)
ANNOTATION_ENTRY -> firAnnotationList += declarationsConverter.convertAnnotationEntry(it)
BLOCK -> firExpression = declarationsConverter.convertBlockExpression(it)
ANNOTATION -> firAnnotationList += declarationBuilder.convertAnnotation(it)
ANNOTATION_ENTRY -> firAnnotationList += declarationBuilder.convertAnnotationEntry(it)
BLOCK -> firExpression = declarationBuilder.convertBlockExpression(it)
else -> if (it.isExpression()) {
context.forwardLabelUsagePermission(annotatedExpression, it)
firExpression = getAsFirExpression(it)
@@ -604,7 +604,7 @@ class ExpressionsConverter(
additionalArgument = getAsFirExpression(node, "Incorrect invoke receiver")
}
TYPE_ARGUMENT_LIST -> {
firTypeArguments += declarationsConverter.convertTypeArguments(node, allowedUnderscoredTypeArgument = true)
firTypeArguments += declarationBuilder.convertTypeArguments(node, allowedUnderscoredTypeArgument = true)
}
VALUE_ARGUMENT_LIST, LAMBDA_ARGUMENT -> {
hasArguments = true
@@ -713,7 +713,7 @@ class ExpressionsConverter(
val whenEntries = mutableListOf<WhenEntry>()
whenExpression.forEachChildren {
when (it.tokenType) {
PROPERTY -> subjectVariable = (declarationsConverter.convertPropertyDeclaration(it) as FirVariable).let { variable ->
PROPERTY -> subjectVariable = (declarationBuilder.convertPropertyDeclaration(it) as FirVariable).let { variable ->
buildProperty {
source = it.toFirSourceElement()
origin = FirDeclarationOrigin.Source
@@ -810,8 +810,8 @@ class ExpressionsConverter(
shouldBindSubject = shouldBindSubject || shouldBind
}
ELSE_KEYWORD -> isElse = true
BLOCK -> firBlock = declarationsConverter.convertBlock(it)
else -> if (it.isExpression()) firBlock = declarationsConverter.convertBlock(it)
BLOCK -> firBlock = declarationBuilder.convertBlock(it)
else -> if (it.isExpression()) firBlock = declarationBuilder.convertBlock(it)
}
}
@@ -916,7 +916,7 @@ class ExpressionsConverter(
var firType: FirTypeRef? = null
whenCondition.forEachChildren {
when (it.tokenType) {
TYPE_REFERENCE -> firType = declarationsConverter.convertType(it)
TYPE_REFERENCE -> firType = declarationBuilder.convertType(it)
IS_KEYWORD -> firOperation = FirOperation.IS
NOT_IS -> firOperation = FirOperation.NOT_IS
}
@@ -1101,7 +1101,7 @@ class ExpressionsConverter(
var blockNode: LighterASTNode? = null
forLoop.forEachChildren {
when (it.tokenType) {
VALUE_PARAMETER -> parameter = declarationsConverter.convertValueParameter(it, null, ValueParameterDeclaration.FOR_LOOP)
VALUE_PARAMETER -> parameter = declarationBuilder.convertValueParameter(it, null, ValueParameterDeclaration.FOR_LOOP)
LOOP_RANGE -> rangeExpression = getAsFirExpression(it, "No range in for loop")
BODY -> blockNode = it
}
@@ -1190,7 +1190,7 @@ class ExpressionsConverter(
var firStatement: FirStatement? = null
body?.forEachChildren {
when (it.tokenType) {
BLOCK -> firBlock = declarationsConverter.convertBlockExpression(it)
BLOCK -> firBlock = declarationBuilder.convertBlockExpression(it)
ANNOTATED_EXPRESSION -> {
if (it.getChildNodeByType(BLOCK) != null) {
firBlock = getAsFirExpression(it)
@@ -1215,7 +1215,7 @@ class ExpressionsConverter(
var finallyBlock: FirBlock? = null
tryExpression.forEachChildren {
when (it.tokenType) {
BLOCK -> tryBlock = declarationsConverter.convertBlock(it)
BLOCK -> tryBlock = declarationBuilder.convertBlock(it)
CATCH -> convertCatchClause(it)?.also { oneClause -> catchClauses += oneClause }
FINALLY -> finallyBlock = convertFinally(it)
}
@@ -1256,13 +1256,13 @@ class ExpressionsConverter(
var blockNode: LighterASTNode? = null
catchClause.forEachChildren {
when (it.tokenType) {
VALUE_PARAMETER_LIST -> valueParameter = declarationsConverter.convertValueParameters(it, FirAnonymousFunctionSymbol()/*TODO*/, ValueParameterDeclaration.CATCH)
VALUE_PARAMETER_LIST -> valueParameter = declarationBuilder.convertValueParameters(it, FirAnonymousFunctionSymbol()/*TODO*/, ValueParameterDeclaration.CATCH)
.firstOrNull() ?: return null
BLOCK -> blockNode = it
}
}
return Triple(valueParameter, declarationsConverter.convertBlock(blockNode), catchClause.toFirSourceElement())
return Triple(valueParameter, declarationBuilder.convertBlock(blockNode), catchClause.toFirSourceElement())
}
/**
@@ -1276,7 +1276,7 @@ class ExpressionsConverter(
}
}
return declarationsConverter.convertBlock(blockNode)
return declarationBuilder.convertBlock(blockNode)
}
/**
@@ -1442,7 +1442,7 @@ class ExpressionsConverter(
var superTypeRef: FirTypeRef = implicitType
superExpression.forEachChildren {
when (it.tokenType) {
TYPE_REFERENCE -> superTypeRef = declarationsConverter.convertType(it)
TYPE_REFERENCE -> superTypeRef = declarationBuilder.convertType(it)
}
}
@@ -51,11 +51,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
open class RawFirBuilder(
open class PsiRawFirBuilder(
session: FirSession,
val baseScopeProvider: FirScopeProvider,
bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL
) : BaseFirBuilder<PsiElement>(session) {
) : AbstractRawFirBuilder<PsiElement>(session) {
protected open fun bindFunctionTarget(target: FirFunctionTarget, function: FirFunction) = target.bind(function)
protected open fun FirFunctionBuilder.additionalFunctionInit() {}
protected open fun FirPropertyBuilder.additionalPropertyInit() {}
@@ -87,7 +87,7 @@ open class RawFirBuilder(
}
override fun PsiElement.toFirSourceElement(kind: KtFakeSourceElementKind?): KtPsiSourceElement {
val actualKind = kind ?: this@RawFirBuilder.context.forcedElementSourceKind ?: KtRealSourceElementKind
val actualKind = kind ?: this@PsiRawFirBuilder.context.forcedElementSourceKind ?: KtRealSourceElementKind
return this.toKtPsiSourceElement(actualKind)
}
@@ -458,7 +458,7 @@ open class RawFirBuilder(
this.status = status
annotations += accessorAnnotationsFromProperty
extractAnnotationsTo(this)
this@RawFirBuilder.context.firFunctionTargets += accessorTarget
this@PsiRawFirBuilder.context.firFunctionTargets += accessorTarget
symbol = FirPropertyAccessorSymbol()
extractValueParametersTo(
this, symbol, ValueParameterDeclaration.SETTER, propertyTypeRefToUse, parameterAnnotationsFromProperty
@@ -486,7 +486,7 @@ open class RawFirBuilder(
}.also {
it.initContainingClassAttr()
bindFunctionTarget(accessorTarget, it)
this@RawFirBuilder.context.firFunctionTargets.removeLast()
this@PsiRawFirBuilder.context.firFunctionTargets.removeLast()
}
}
isGetter || property.isVar -> {
@@ -629,7 +629,7 @@ open class RawFirBuilder(
require(hasValOrVar())
val type = typeReference.convertSafe<FirTypeRef>() ?: createNoTypeForParameterTypeRef()
val status = FirDeclarationStatusImpl(visibility, modality).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect
isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier()
isOverride = hasModifier(OVERRIDE_KEYWORD)
isConst = hasModifier(CONST_KEYWORD)
@@ -861,7 +861,7 @@ open class RawFirBuilder(
origin = FirDeclarationOrigin.Synthetic
name = NameUtils.delegateFieldName(fieldOrd)
returnTypeRef = type
symbol = FirFieldSymbol(CallableId(this@RawFirBuilder.context.currentClassId, name))
symbol = FirFieldSymbol(CallableId(this@PsiRawFirBuilder.context.currentClassId, name))
isVar = false
status = FirDeclarationStatusImpl(Visibilities.Private, Modality.FINAL)
initializer = delegateExpression
@@ -1018,7 +1018,7 @@ open class RawFirBuilder(
val explicitVisibility = this?.visibility?.takeUnless { it == Visibilities.Unknown }
val status = FirDeclarationStatusImpl(explicitVisibility ?: defaultVisibility(), Modality.FINAL).apply {
isExpect = this@toFirConstructor?.hasExpectModifier() == true || this@RawFirBuilder.context.containerIsExpect
isExpect = this@toFirConstructor?.hasExpectModifier() == true || this@PsiRawFirBuilder.context.containerIsExpect
isActual = this@toFirConstructor?.hasActualModifier() == true
isInner = owner.hasModifier(INNER_KEYWORD)
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
@@ -1144,7 +1144,7 @@ open class RawFirBuilder(
ownerClassHasDefaultConstructor: Boolean
): FirDeclaration {
val ktEnumEntry = this@toFirEnumEntry
val containingClassIsExpectClass = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect
val containingClassIsExpectClass = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
return buildEnumEntry {
source = toFirSourceElement()
moduleData = baseModuleData
@@ -1172,7 +1172,7 @@ open class RawFirBuilder(
moduleData = baseModuleData
origin = FirDeclarationOrigin.Source
classKind = ClassKind.ENUM_ENTRY
scopeProvider = this@RawFirBuilder.baseScopeProvider
scopeProvider = this@PsiRawFirBuilder.baseScopeProvider
symbol = FirAnonymousObjectSymbol()
status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL)
@@ -1702,7 +1702,7 @@ open class RawFirBuilder(
returnTypeRef = selfTypeRef
val explicitVisibility = visibility
status = FirDeclarationStatusImpl(explicitVisibility, Modality.FINAL).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect
isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier()
isInner = owner.hasModifier(INNER_KEYWORD)
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
@@ -1717,7 +1717,7 @@ open class RawFirBuilder(
) {
getDelegationCall().convert(delegatedTypeRef)
}
this@RawFirBuilder.context.firFunctionTargets += target
this@PsiRawFirBuilder.context.firFunctionTargets += target
extractAnnotationsTo(this)
typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters)
extractValueParametersTo(this, symbol, ValueParameterDeclaration.FUNCTION)
@@ -1726,7 +1726,7 @@ open class RawFirBuilder(
val (body, contractDescription) = buildFirBody()
contractDescription?.let { this.contractDescription = it }
this.body = body
this@RawFirBuilder.context.firFunctionTargets.removeLast()
this@PsiRawFirBuilder.context.firFunctionTargets.removeLast()
}.also {
it.containingClassForStaticMemberAttr = currentDispatchReceiverType()!!.lookupTag
bindFunctionTarget(target, it)
@@ -1766,13 +1766,13 @@ open class RawFirBuilder(
private fun KtDeclarationWithInitializer.toInitializerExpression() =
runIf(hasInitializer()) {
this@RawFirBuilder.context.calleeNamesForLambda += null
this@PsiRawFirBuilder.context.calleeNamesForLambda += null
val expression = buildOrLazyExpression(null) {
initializer.toFirExpression("Should have initializer")
}
this@RawFirBuilder.context.calleeNamesForLambda.removeLast()
this@PsiRawFirBuilder.context.calleeNamesForLambda.removeLast()
expression
}
@@ -1867,7 +1867,7 @@ open class RawFirBuilder(
)
status = FirDeclarationStatusImpl(visibility, modality).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect
isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier()
isOverride = hasModifier(OVERRIDE_KEYWORD)
isConst = hasModifier(CONST_KEYWORD)
@@ -80,7 +80,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
protected fun KtFile.toFirFile(bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL): FirFile {
val session = FirSessionFactoryHelper.createEmptySession()
return RawFirBuilder(
return PsiRawFirBuilder(
session,
StubFirScopeProvider,
bodyBuildingMode = bodyBuildingMode
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.types.ConstantValueKind
import org.jetbrains.kotlin.util.OperatorNameConventions
//T can be either PsiElement, or LighterASTNode
abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Context<T> = Context()) {
abstract class AbstractRawFirBuilder<T>(val baseSession: FirSession, val context: Context<T> = Context()) {
val baseModuleData: FirModuleData = baseSession.moduleData
abstract fun T.toFirSourceElement(kind: KtFakeSourceElementKind? = null): KtSourceElement