[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
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveCompone
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
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.declarations.FirFile
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -44,7 +44,7 @@ internal class LLFirFileBuilder(val moduleComponents: LLFirModuleResolveComponen
else -> BodyBuildingMode.LAZY_BODIES else -> BodyBuildingMode.LAZY_BODIES
} }
RawFirBuilder( PsiRawFirBuilder(
moduleComponents.session, moduleComponents.session,
moduleComponents.scopeProvider, moduleComponents.scopeProvider,
bodyBuildingMode = bodyBuildingMode bodyBuildingMode = bodyBuildingMode
@@ -10,7 +10,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.getExplicitBackingField import org.jetbrains.kotlin.fir.declarations.utils.getExplicitBackingField
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
@@ -59,7 +59,7 @@ internal object FirLazyBodiesCalculator {
fun calculateLazyArgumentsForAnnotation(annotationCall: FirAnnotationCall, session: FirSession): FirArgumentList { fun calculateLazyArgumentsForAnnotation(annotationCall: FirAnnotationCall, session: FirSession): FirArgumentList {
require(needCalculatingAnnotationCall(annotationCall)) require(needCalculatingAnnotationCall(annotationCall))
val builder = RawFirBuilder(session, baseScopeProvider = session.kotlinScopeProvider) val builder = PsiRawFirBuilder(session, baseScopeProvider = session.kotlinScopeProvider)
val ktAnnotationEntry = annotationCall.psi as KtAnnotationEntry val ktAnnotationEntry = annotationCall.psi as KtAnnotationEntry
builder.context.packageFqName = ktAnnotationEntry.containingKtFile.packageFqName builder.context.packageFqName = ktAnnotationEntry.containingKtFile.packageFqName
val newAnnotationCall = builder.buildAnnotationCall(ktAnnotationEntry) val newAnnotationCall = builder.buildAnnotationCall(ktAnnotationEntry)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession 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.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -22,7 +22,7 @@ internal fun buildFileFirAnnotation(
val replacementApplier = replacement?.Applier() val replacementApplier = replacement?.Applier()
val builder = object : RawFirBuilder(session, baseScopeProvider) { val builder = object : PsiRawFirBuilder(session, baseScopeProvider) {
inner class VisitorWithReplacement : Visitor() { inner class VisitorWithReplacement : Visitor() {
override fun convertElement(element: KtElement, original: FirElement?): FirElement? = override fun convertElement(element: KtElement, original: FirElement?): FirElement? =
super.convertElement(replacementApplier?.tryReplace(element) ?: element, original) super.convertElement(replacementApplier?.tryReplace(element) ?: element, original)
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirBackingFieldBuilder import org.jetbrains.kotlin.fir.declarations.builder.FirBackingFieldBuilder
import org.jetbrains.kotlin.fir.declarations.builder.FirFunctionBuilder import org.jetbrains.kotlin.fir.declarations.builder.FirFunctionBuilder
@@ -45,7 +45,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
private val additionalPropertyInit: FirPropertyBuilder.() -> Unit = {}, private val additionalPropertyInit: FirPropertyBuilder.() -> Unit = {},
private val additionalAccessorInit: FirPropertyAccessorBuilder.() -> Unit = {}, private val additionalAccessorInit: FirPropertyAccessorBuilder.() -> Unit = {},
private val additionalBackingFieldInit: FirBackingFieldBuilder.() -> Unit = {}, private val additionalBackingFieldInit: FirBackingFieldBuilder.() -> Unit = {},
) : RawFirBuilder(session, baseScopeProvider, bodyBuildingMode = BodyBuildingMode.NORMAL) { ) : PsiRawFirBuilder(session, baseScopeProvider, bodyBuildingMode = BodyBuildingMode.NORMAL) {
override fun FirFunctionBuilder.additionalFunctionInit() { override fun FirFunctionBuilder.additionalFunctionInit() {
additionalFunctionInit.invoke(this) additionalFunctionInit.invoke(this)
} }
@@ -68,7 +68,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
scopeProvider: FirScopeProvider, scopeProvider: FirScopeProvider,
file: KtFile, file: KtFile,
): FirFile { ): FirFile {
val builder = RawFirBuilder(session,scopeProvider, bodyBuildingMode = BodyBuildingMode.LAZY_BODIES) val builder = PsiRawFirBuilder(session, scopeProvider, bodyBuildingMode = BodyBuildingMode.LAZY_BODIES)
return builder.buildFirFile(file) return builder.buildFirFile(file)
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve
import org.jetbrains.kotlin.fir.FirSession 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.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.types.FirUserTypeRef import org.jetbrains.kotlin.fir.types.FirUserTypeRef
import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.KtTypeReference
@@ -16,7 +16,7 @@ internal fun buildFirUserTypeRef(
session: FirSession, session: FirSession,
baseScopeProvider: FirScopeProvider baseScopeProvider: FirScopeProvider
): FirUserTypeRef { ): FirUserTypeRef {
val builder = object : RawFirBuilder(session, baseScopeProvider) { val builder = object : PsiRawFirBuilder(session, baseScopeProvider) {
fun build(): FirUserTypeRef = Visitor().visitTypeReference(typeReference, null) as FirUserTypeRef fun build(): FirUserTypeRef = Visitor().visitTypeReference(typeReference, null) as FirUserTypeRef
} }
builder.context.packageFqName = typeReference.containingKtFile.packageFqName builder.context.packageFqName = typeReference.containingKtFile.packageFqName
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.Analys
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.expressions.FirLazyBlock import org.jetbrains.kotlin.fir.expressions.FirLazyBlock
import org.jetbrains.kotlin.fir.expressions.FirLazyExpression import org.jetbrains.kotlin.fir.expressions.FirLazyExpression
import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.fir.renderer.FirRenderer
@@ -36,7 +36,7 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi
val session = firResolveSession.useSiteFirSession val session = firResolveSession.useSiteFirSession
val provider = session.kotlinScopeProvider val provider = session.kotlinScopeProvider
val laziedFirFile = RawFirBuilder( val laziedFirFile = PsiRawFirBuilder(
session, session,
provider, provider,
bodyBuildingMode = BodyBuildingMode.LAZY_BODIES bodyBuildingMode = BodyBuildingMode.LAZY_BODIES
@@ -45,7 +45,7 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi
FirLazyBodiesCalculator.calculateAllLazyExpressionsInFile(laziedFirFile) FirLazyBodiesCalculator.calculateAllLazyExpressionsInFile(laziedFirFile)
laziedFirFile.accept(lazyChecker) laziedFirFile.accept(lazyChecker)
val fullFirFile = RawFirBuilder( val fullFirFile = PsiRawFirBuilder(
session, session,
provider, provider,
bodyBuildingMode = BodyBuildingMode.NORMAL bodyBuildingMode = BodyBuildingMode.NORMAL
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.Analys
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession 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.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.renderer.ConeIdFullRenderer import org.jetbrains.kotlin.fir.renderer.ConeIdFullRenderer
@@ -117,7 +117,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
} }
val session = FirSessionFactoryHelper.createEmptySession() val session = FirSessionFactoryHelper.createEmptySession()
val firBuilder = RawFirBuilder(session, scopeProvider) val firBuilder = PsiRawFirBuilder(session, scopeProvider)
val original = firBuilder.buildFirFile(file) val original = firBuilder.buildFirFile(file)
val designationBuilder = DesignationBuilder(elementToBuild) val designationBuilder = DesignationBuilder(elementToBuild)
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.context.withProject
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.FirTestSessionFactoryHelper import org.jetbrains.kotlin.fir.FirTestSessionFactoryHelper
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.java.FirJavaElementFinder import org.jetbrains.kotlin.fir.java.FirJavaElementFinder
import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
@@ -156,7 +156,7 @@ abstract class AbstractSimpleFileBenchmark {
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(env.project)) .uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(env.project))
val session = FirTestSessionFactoryHelper.createSessionForTests(env.toAbstractProjectEnvironment(), scope.toAbstractProjectFileSearchScope()) val session = FirTestSessionFactoryHelper.createSessionForTests(env.toAbstractProjectEnvironment(), scope.toAbstractProjectFileSearchScope())
val firProvider = session.firProvider as FirProviderImpl val firProvider = session.firProvider as FirProviderImpl
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider) val builder = PsiRawFirBuilder(session, firProvider.kotlinScopeProvider)
val totalTransformer = FirTotalResolveProcessor(session) val totalTransformer = FirTotalResolveProcessor(session)
val firFile = builder.buildFirFile(file).also(firProvider::recordFile) val firFile = builder.buildFirFile(file).also(firProvider::recordFile)
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.fir.FirSession 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.declarations.FirFile
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.firProvider
@@ -47,7 +47,7 @@ fun FirSession.buildFirViaLightTree(
fun FirSession.buildFirFromKtFiles(ktFiles: Collection<KtFile>): List<FirFile> { fun FirSession.buildFirFromKtFiles(ktFiles: Collection<KtFile>): List<FirFile> {
val firProvider = (firProvider as FirProviderImpl) val firProvider = (firProvider as FirProviderImpl)
val builder = RawFirBuilder(this, firProvider.kotlinScopeProvider) val builder = PsiRawFirBuilder(this, firProvider.kotlinScopeProvider)
return ktFiles.map { return ktFiles.map {
builder.buildFirFile(it).also { firFile -> builder.buildFirFile(it).also { firFile ->
firProvider.recordFile(firFile) firProvider.recordFile(firFile)
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector 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.declarations.FirFile
import org.jetbrains.kotlin.fir.dump.MultiModuleHtmlFirDump import org.jetbrains.kotlin.fir.dump.MultiModuleHtmlFirDump
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir 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.resolve.transformers.createAllCompilerResolveProcessors
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import sun.management.ManagementFactoryHelper
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.PrintStream import java.io.PrintStream
import java.lang.management.ManagementFactory import java.lang.management.ManagementFactory
import java.text.DecimalFormat
private const val FAIL_FAST = true private const val FAIL_FAST = true
@@ -139,7 +137,7 @@ class FirResolveModularizedTotalKotlinTest : AbstractFrontendModularizedTest() {
val lightTree2Fir = LightTree2Fir(session, firProvider.kotlinScopeProvider, diagnosticsReporter = null) val lightTree2Fir = LightTree2Fir(session, firProvider.kotlinScopeProvider, diagnosticsReporter = null)
bench.buildFiles(lightTree2Fir, sourceFiles) bench.buildFiles(lightTree2Fir, sourceFiles)
} else { } else {
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider) val builder = PsiRawFirBuilder(session, firProvider.kotlinScopeProvider)
bench.buildFiles(builder, sourceFiles.map { it as KtPsiSourceFile }) 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.FirSession
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.languageVersionSettings 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.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.lexer.KotlinLexer import org.jetbrains.kotlin.lexer.KotlinLexer
import org.jetbrains.kotlin.parsing.KotlinLightParser import org.jetbrains.kotlin.parsing.KotlinLightParser
@@ -87,7 +87,7 @@ class LightTree2Fir(
sourceFile: KtSourceFile, sourceFile: KtSourceFile,
linesMapping: KtSourceFileLinesMapping, linesMapping: KtSourceFileLinesMapping,
): FirFile { ): FirFile {
return DeclarationsConverter(session, scopeProvider, lightTree) return LightTreeRawFirDeclarationBuilder(session, scopeProvider, lightTree)
.convertFile(lightTree.root, sourceFile, linesMapping) .convertFile(lightTree.root, sourceFile, linesMapping)
} }
@@ -13,20 +13,19 @@ import com.intellij.util.diff.FlyweightCapableTreeStructure
import org.jetbrains.kotlin.* import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.ElementTypeUtils.isExpression import org.jetbrains.kotlin.ElementTypeUtils.isExpression
import org.jetbrains.kotlin.fir.FirSession 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.Context
import org.jetbrains.kotlin.fir.builder.escapedStringToCharacter import org.jetbrains.kotlin.fir.builder.escapedStringToCharacter
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.lexer.KtToken
import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import kotlin.contracts.ExperimentalContracts
abstract class BaseConverter( abstract class AbstractLightTreeRawFirBuilder(
baseSession: FirSession, baseSession: FirSession,
val tree: FlyweightCapableTreeStructure<LighterASTNode>, val tree: FlyweightCapableTreeStructure<LighterASTNode>,
context: Context<LighterASTNode> = Context() context: Context<LighterASTNode> = Context()
) : BaseFirBuilder<LighterASTNode>(baseSession, context) { ) : AbstractRawFirBuilder<LighterASTNode>(baseSession, context) {
protected val implicitType = FirImplicitTypeRefImplWithoutSource protected val implicitType = FirImplicitTypeRefImplWithoutSource
override fun LighterASTNode.toFirSourceElement(kind: KtFakeSourceElementKind?): KtLightSourceElement { 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.runIf
import org.jetbrains.kotlin.utils.addToStdlib.runUnless import org.jetbrains.kotlin.utils.addToStdlib.runUnless
class DeclarationsConverter( class LightTreeRawFirDeclarationBuilder(
session: FirSession, session: FirSession,
internal val baseScopeProvider: FirScopeProvider, internal val baseScopeProvider: FirScopeProvider,
tree: FlyweightCapableTreeStructure<LighterASTNode>, tree: FlyweightCapableTreeStructure<LighterASTNode>,
context: Context<LighterASTNode> = Context(), 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] * [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.types.expressions.OperatorConventions
import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.util.OperatorNameConventions
class ExpressionsConverter( class LightTreeRawFirExpressionBuilder(
session: FirSession, session: FirSession,
tree: FlyweightCapableTreeStructure<LighterASTNode>, tree: FlyweightCapableTreeStructure<LighterASTNode>,
private val declarationsConverter: DeclarationsConverter, private val declarationBuilder: LightTreeRawFirDeclarationBuilder,
context: Context<LighterASTNode> = Context(), context: Context<LighterASTNode> = Context(),
) : BaseConverter(session, tree, context) { ) : AbstractLightTreeRawFirBuilder(session, tree, context) {
inline fun <reified R : FirElement> getAsFirExpression(expression: LighterASTNode?, errorReason: String = ""): R { inline fun <reified R : FirElement> getAsFirExpression(expression: LighterASTNode?, errorReason: String = ""): R {
val converted = expression?.let { convertExpression(it, errorReason) } val converted = expression?.let { convertExpression(it, errorReason) }
@@ -113,9 +113,9 @@ class ExpressionsConverter(
THIS_EXPRESSION -> convertThisExpression(expression) THIS_EXPRESSION -> convertThisExpression(expression)
SUPER_EXPRESSION -> convertSuperExpression(expression) SUPER_EXPRESSION -> convertSuperExpression(expression)
OBJECT_LITERAL -> declarationsConverter.convertObjectLiteral(expression) OBJECT_LITERAL -> declarationBuilder.convertObjectLiteral(expression)
FUN -> declarationsConverter.convertFunctionDeclaration(expression) FUN -> declarationBuilder.convertFunctionDeclaration(expression)
DESTRUCTURING_DECLARATION -> declarationsConverter.convertDestructingDeclaration(expression).toFirDestructingDeclaration(baseModuleData) DESTRUCTURING_DECLARATION -> declarationBuilder.convertDestructingDeclaration(expression).toFirDestructingDeclaration(baseModuleData)
else -> buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.ExpressionExpected)) else -> buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.ExpressionExpected))
} }
} }
@@ -132,7 +132,7 @@ class ExpressionsConverter(
val functionSymbol = FirAnonymousFunctionSymbol() val functionSymbol = FirAnonymousFunctionSymbol()
lambdaExpression.getChildNodesByType(FUNCTION_LITERAL).first().forEachChildren { lambdaExpression.getChildNodesByType(FUNCTION_LITERAL).first().forEachChildren {
when (it.tokenType) { 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 BLOCK -> block = it
ARROW -> hasArrow = true ARROW -> hasArrow = true
} }
@@ -188,7 +188,7 @@ class ExpressionsConverter(
} }
body = if (block != null) { body = if (block != null) {
declarationsConverter.convertBlockExpressionWithoutBuilding(block!!).apply { declarationBuilder.convertBlockExpressionWithoutBuilding(block!!).apply {
statements.firstOrNull()?.let { statements.firstOrNull()?.let {
if (it.isContractBlockFirCheck()) { if (it.isContractBlockFirCheck()) {
this@buildAnonymousFunction.contractDescription = it.toLegacyRawContractDescription() this@buildAnonymousFunction.contractDescription = it.toLegacyRawContractDescription()
@@ -326,7 +326,7 @@ class ExpressionsConverter(
binaryExpression.forEachChildren { binaryExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
OPERATION_REFERENCE -> operationTokenName = it.asText 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") else -> if (it.isExpression()) leftArgAsFir = getAsFirExpression(it, "No left operand")
} }
} }
@@ -361,8 +361,8 @@ class ExpressionsConverter(
context.addNewLabel(pair.first) context.addNewLabel(pair.first)
errorLabelSource = pair.second errorLabelSource = pair.second
} }
BLOCK -> firExpression = declarationsConverter.convertBlock(it) BLOCK -> firExpression = declarationBuilder.convertBlock(it)
PROPERTY -> firExpression = declarationsConverter.convertPropertyDeclaration(it) PROPERTY -> firExpression = declarationBuilder.convertPropertyDeclaration(it)
else -> if (it.isExpression()) firExpression = getAsFirExpression(it) else -> if (it.isExpression()) firExpression = getAsFirExpression(it)
} }
} }
@@ -436,9 +436,9 @@ class ExpressionsConverter(
val firAnnotationList = mutableListOf<FirAnnotation>() val firAnnotationList = mutableListOf<FirAnnotation>()
annotatedExpression.forEachChildren { annotatedExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
ANNOTATION -> firAnnotationList += declarationsConverter.convertAnnotation(it) ANNOTATION -> firAnnotationList += declarationBuilder.convertAnnotation(it)
ANNOTATION_ENTRY -> firAnnotationList += declarationsConverter.convertAnnotationEntry(it) ANNOTATION_ENTRY -> firAnnotationList += declarationBuilder.convertAnnotationEntry(it)
BLOCK -> firExpression = declarationsConverter.convertBlockExpression(it) BLOCK -> firExpression = declarationBuilder.convertBlockExpression(it)
else -> if (it.isExpression()) { else -> if (it.isExpression()) {
context.forwardLabelUsagePermission(annotatedExpression, it) context.forwardLabelUsagePermission(annotatedExpression, it)
firExpression = getAsFirExpression(it) firExpression = getAsFirExpression(it)
@@ -604,7 +604,7 @@ class ExpressionsConverter(
additionalArgument = getAsFirExpression(node, "Incorrect invoke receiver") additionalArgument = getAsFirExpression(node, "Incorrect invoke receiver")
} }
TYPE_ARGUMENT_LIST -> { TYPE_ARGUMENT_LIST -> {
firTypeArguments += declarationsConverter.convertTypeArguments(node, allowedUnderscoredTypeArgument = true) firTypeArguments += declarationBuilder.convertTypeArguments(node, allowedUnderscoredTypeArgument = true)
} }
VALUE_ARGUMENT_LIST, LAMBDA_ARGUMENT -> { VALUE_ARGUMENT_LIST, LAMBDA_ARGUMENT -> {
hasArguments = true hasArguments = true
@@ -713,7 +713,7 @@ class ExpressionsConverter(
val whenEntries = mutableListOf<WhenEntry>() val whenEntries = mutableListOf<WhenEntry>()
whenExpression.forEachChildren { whenExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
PROPERTY -> subjectVariable = (declarationsConverter.convertPropertyDeclaration(it) as FirVariable).let { variable -> PROPERTY -> subjectVariable = (declarationBuilder.convertPropertyDeclaration(it) as FirVariable).let { variable ->
buildProperty { buildProperty {
source = it.toFirSourceElement() source = it.toFirSourceElement()
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
@@ -810,8 +810,8 @@ class ExpressionsConverter(
shouldBindSubject = shouldBindSubject || shouldBind shouldBindSubject = shouldBindSubject || shouldBind
} }
ELSE_KEYWORD -> isElse = true ELSE_KEYWORD -> isElse = true
BLOCK -> firBlock = declarationsConverter.convertBlock(it) BLOCK -> firBlock = declarationBuilder.convertBlock(it)
else -> if (it.isExpression()) firBlock = declarationsConverter.convertBlock(it) else -> if (it.isExpression()) firBlock = declarationBuilder.convertBlock(it)
} }
} }
@@ -916,7 +916,7 @@ class ExpressionsConverter(
var firType: FirTypeRef? = null var firType: FirTypeRef? = null
whenCondition.forEachChildren { whenCondition.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
TYPE_REFERENCE -> firType = declarationsConverter.convertType(it) TYPE_REFERENCE -> firType = declarationBuilder.convertType(it)
IS_KEYWORD -> firOperation = FirOperation.IS IS_KEYWORD -> firOperation = FirOperation.IS
NOT_IS -> firOperation = FirOperation.NOT_IS NOT_IS -> firOperation = FirOperation.NOT_IS
} }
@@ -1101,7 +1101,7 @@ class ExpressionsConverter(
var blockNode: LighterASTNode? = null var blockNode: LighterASTNode? = null
forLoop.forEachChildren { forLoop.forEachChildren {
when (it.tokenType) { 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") LOOP_RANGE -> rangeExpression = getAsFirExpression(it, "No range in for loop")
BODY -> blockNode = it BODY -> blockNode = it
} }
@@ -1190,7 +1190,7 @@ class ExpressionsConverter(
var firStatement: FirStatement? = null var firStatement: FirStatement? = null
body?.forEachChildren { body?.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
BLOCK -> firBlock = declarationsConverter.convertBlockExpression(it) BLOCK -> firBlock = declarationBuilder.convertBlockExpression(it)
ANNOTATED_EXPRESSION -> { ANNOTATED_EXPRESSION -> {
if (it.getChildNodeByType(BLOCK) != null) { if (it.getChildNodeByType(BLOCK) != null) {
firBlock = getAsFirExpression(it) firBlock = getAsFirExpression(it)
@@ -1215,7 +1215,7 @@ class ExpressionsConverter(
var finallyBlock: FirBlock? = null var finallyBlock: FirBlock? = null
tryExpression.forEachChildren { tryExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
BLOCK -> tryBlock = declarationsConverter.convertBlock(it) BLOCK -> tryBlock = declarationBuilder.convertBlock(it)
CATCH -> convertCatchClause(it)?.also { oneClause -> catchClauses += oneClause } CATCH -> convertCatchClause(it)?.also { oneClause -> catchClauses += oneClause }
FINALLY -> finallyBlock = convertFinally(it) FINALLY -> finallyBlock = convertFinally(it)
} }
@@ -1256,13 +1256,13 @@ class ExpressionsConverter(
var blockNode: LighterASTNode? = null var blockNode: LighterASTNode? = null
catchClause.forEachChildren { catchClause.forEachChildren {
when (it.tokenType) { 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 .firstOrNull() ?: return null
BLOCK -> blockNode = it 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 var superTypeRef: FirTypeRef = implicitType
superExpression.forEachChildren { superExpression.forEachChildren {
when (it.tokenType) { 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.runIf
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
open class RawFirBuilder( open class PsiRawFirBuilder(
session: FirSession, session: FirSession,
val baseScopeProvider: FirScopeProvider, val baseScopeProvider: FirScopeProvider,
bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL
) : BaseFirBuilder<PsiElement>(session) { ) : AbstractRawFirBuilder<PsiElement>(session) {
protected open fun bindFunctionTarget(target: FirFunctionTarget, function: FirFunction) = target.bind(function) protected open fun bindFunctionTarget(target: FirFunctionTarget, function: FirFunction) = target.bind(function)
protected open fun FirFunctionBuilder.additionalFunctionInit() {} protected open fun FirFunctionBuilder.additionalFunctionInit() {}
protected open fun FirPropertyBuilder.additionalPropertyInit() {} protected open fun FirPropertyBuilder.additionalPropertyInit() {}
@@ -87,7 +87,7 @@ open class RawFirBuilder(
} }
override fun PsiElement.toFirSourceElement(kind: KtFakeSourceElementKind?): KtPsiSourceElement { 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) return this.toKtPsiSourceElement(actualKind)
} }
@@ -458,7 +458,7 @@ open class RawFirBuilder(
this.status = status this.status = status
annotations += accessorAnnotationsFromProperty annotations += accessorAnnotationsFromProperty
extractAnnotationsTo(this) extractAnnotationsTo(this)
this@RawFirBuilder.context.firFunctionTargets += accessorTarget this@PsiRawFirBuilder.context.firFunctionTargets += accessorTarget
symbol = FirPropertyAccessorSymbol() symbol = FirPropertyAccessorSymbol()
extractValueParametersTo( extractValueParametersTo(
this, symbol, ValueParameterDeclaration.SETTER, propertyTypeRefToUse, parameterAnnotationsFromProperty this, symbol, ValueParameterDeclaration.SETTER, propertyTypeRefToUse, parameterAnnotationsFromProperty
@@ -486,7 +486,7 @@ open class RawFirBuilder(
}.also { }.also {
it.initContainingClassAttr() it.initContainingClassAttr()
bindFunctionTarget(accessorTarget, it) bindFunctionTarget(accessorTarget, it)
this@RawFirBuilder.context.firFunctionTargets.removeLast() this@PsiRawFirBuilder.context.firFunctionTargets.removeLast()
} }
} }
isGetter || property.isVar -> { isGetter || property.isVar -> {
@@ -629,7 +629,7 @@ open class RawFirBuilder(
require(hasValOrVar()) require(hasValOrVar())
val type = typeReference.convertSafe<FirTypeRef>() ?: createNoTypeForParameterTypeRef() val type = typeReference.convertSafe<FirTypeRef>() ?: createNoTypeForParameterTypeRef()
val status = FirDeclarationStatusImpl(visibility, modality).apply { val status = FirDeclarationStatusImpl(visibility, modality).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier() isActual = hasActualModifier()
isOverride = hasModifier(OVERRIDE_KEYWORD) isOverride = hasModifier(OVERRIDE_KEYWORD)
isConst = hasModifier(CONST_KEYWORD) isConst = hasModifier(CONST_KEYWORD)
@@ -861,7 +861,7 @@ open class RawFirBuilder(
origin = FirDeclarationOrigin.Synthetic origin = FirDeclarationOrigin.Synthetic
name = NameUtils.delegateFieldName(fieldOrd) name = NameUtils.delegateFieldName(fieldOrd)
returnTypeRef = type returnTypeRef = type
symbol = FirFieldSymbol(CallableId(this@RawFirBuilder.context.currentClassId, name)) symbol = FirFieldSymbol(CallableId(this@PsiRawFirBuilder.context.currentClassId, name))
isVar = false isVar = false
status = FirDeclarationStatusImpl(Visibilities.Private, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.Private, Modality.FINAL)
initializer = delegateExpression initializer = delegateExpression
@@ -1018,7 +1018,7 @@ open class RawFirBuilder(
val explicitVisibility = this?.visibility?.takeUnless { it == Visibilities.Unknown } val explicitVisibility = this?.visibility?.takeUnless { it == Visibilities.Unknown }
val status = FirDeclarationStatusImpl(explicitVisibility ?: defaultVisibility(), Modality.FINAL).apply { 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 isActual = this@toFirConstructor?.hasActualModifier() == true
isInner = owner.hasModifier(INNER_KEYWORD) isInner = owner.hasModifier(INNER_KEYWORD)
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
@@ -1144,7 +1144,7 @@ open class RawFirBuilder(
ownerClassHasDefaultConstructor: Boolean ownerClassHasDefaultConstructor: Boolean
): FirDeclaration { ): FirDeclaration {
val ktEnumEntry = this@toFirEnumEntry val ktEnumEntry = this@toFirEnumEntry
val containingClassIsExpectClass = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect val containingClassIsExpectClass = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
return buildEnumEntry { return buildEnumEntry {
source = toFirSourceElement() source = toFirSourceElement()
moduleData = baseModuleData moduleData = baseModuleData
@@ -1172,7 +1172,7 @@ open class RawFirBuilder(
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
classKind = ClassKind.ENUM_ENTRY classKind = ClassKind.ENUM_ENTRY
scopeProvider = this@RawFirBuilder.baseScopeProvider scopeProvider = this@PsiRawFirBuilder.baseScopeProvider
symbol = FirAnonymousObjectSymbol() symbol = FirAnonymousObjectSymbol()
status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL)
@@ -1702,7 +1702,7 @@ open class RawFirBuilder(
returnTypeRef = selfTypeRef returnTypeRef = selfTypeRef
val explicitVisibility = visibility val explicitVisibility = visibility
status = FirDeclarationStatusImpl(explicitVisibility, Modality.FINAL).apply { status = FirDeclarationStatusImpl(explicitVisibility, Modality.FINAL).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier() isActual = hasActualModifier()
isInner = owner.hasModifier(INNER_KEYWORD) isInner = owner.hasModifier(INNER_KEYWORD)
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
@@ -1717,7 +1717,7 @@ open class RawFirBuilder(
) { ) {
getDelegationCall().convert(delegatedTypeRef) getDelegationCall().convert(delegatedTypeRef)
} }
this@RawFirBuilder.context.firFunctionTargets += target this@PsiRawFirBuilder.context.firFunctionTargets += target
extractAnnotationsTo(this) extractAnnotationsTo(this)
typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters) typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters)
extractValueParametersTo(this, symbol, ValueParameterDeclaration.FUNCTION) extractValueParametersTo(this, symbol, ValueParameterDeclaration.FUNCTION)
@@ -1726,7 +1726,7 @@ open class RawFirBuilder(
val (body, contractDescription) = buildFirBody() val (body, contractDescription) = buildFirBody()
contractDescription?.let { this.contractDescription = it } contractDescription?.let { this.contractDescription = it }
this.body = body this.body = body
this@RawFirBuilder.context.firFunctionTargets.removeLast() this@PsiRawFirBuilder.context.firFunctionTargets.removeLast()
}.also { }.also {
it.containingClassForStaticMemberAttr = currentDispatchReceiverType()!!.lookupTag it.containingClassForStaticMemberAttr = currentDispatchReceiverType()!!.lookupTag
bindFunctionTarget(target, it) bindFunctionTarget(target, it)
@@ -1766,13 +1766,13 @@ open class RawFirBuilder(
private fun KtDeclarationWithInitializer.toInitializerExpression() = private fun KtDeclarationWithInitializer.toInitializerExpression() =
runIf(hasInitializer()) { runIf(hasInitializer()) {
this@RawFirBuilder.context.calleeNamesForLambda += null this@PsiRawFirBuilder.context.calleeNamesForLambda += null
val expression = buildOrLazyExpression(null) { val expression = buildOrLazyExpression(null) {
initializer.toFirExpression("Should have initializer") initializer.toFirExpression("Should have initializer")
} }
this@RawFirBuilder.context.calleeNamesForLambda.removeLast() this@PsiRawFirBuilder.context.calleeNamesForLambda.removeLast()
expression expression
} }
@@ -1867,7 +1867,7 @@ open class RawFirBuilder(
) )
status = FirDeclarationStatusImpl(visibility, modality).apply { status = FirDeclarationStatusImpl(visibility, modality).apply {
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect isExpect = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
isActual = hasActualModifier() isActual = hasActualModifier()
isOverride = hasModifier(OVERRIDE_KEYWORD) isOverride = hasModifier(OVERRIDE_KEYWORD)
isConst = hasModifier(CONST_KEYWORD) isConst = hasModifier(CONST_KEYWORD)
@@ -80,7 +80,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
protected fun KtFile.toFirFile(bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL): FirFile { protected fun KtFile.toFirFile(bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL): FirFile {
val session = FirSessionFactoryHelper.createEmptySession() val session = FirSessionFactoryHelper.createEmptySession()
return RawFirBuilder( return PsiRawFirBuilder(
session, session,
StubFirScopeProvider, StubFirScopeProvider,
bodyBuildingMode = bodyBuildingMode bodyBuildingMode = bodyBuildingMode
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.types.ConstantValueKind
import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.util.OperatorNameConventions
//T can be either PsiElement, or LighterASTNode //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 val baseModuleData: FirModuleData = baseSession.moduleData
abstract fun T.toFirSourceElement(kind: KtFakeSourceElementKind? = null): KtSourceElement abstract fun T.toFirSourceElement(kind: KtFakeSourceElementKind? = null): KtSourceElement
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.KtDiagnostic import org.jetbrains.kotlin.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
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.declarations.FirFile
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
@@ -138,7 +138,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
firFile firFile
} }
} else { } else {
val firBuilder = RawFirBuilder( val firBuilder = PsiRawFirBuilder(
session, session,
firProvider.kotlinScopeProvider, firProvider.kotlinScopeProvider,
bodyBuildingMode = BodyBuildingMode.lazyBodies(useLazyBodiesModeForRawFir) bodyBuildingMode = BodyBuildingMode.lazyBodies(useLazyBodiesModeForRawFir)
@@ -7,19 +7,15 @@ package org.jetbrains.kotlin.fir
import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.KtIoFileSourceFile
import org.jetbrains.kotlin.KtPsiSourceFile import org.jetbrains.kotlin.KtPsiSourceFile
import org.jetbrains.kotlin.KtSourceFile import org.jetbrains.kotlin.KtSourceFile
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.declarations.FirFile
import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
import org.jetbrains.kotlin.fir.references.isError import org.jetbrains.kotlin.fir.references.isError
import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
@@ -32,7 +28,6 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.readSourceFileWithMapping import org.jetbrains.kotlin.readSourceFileWithMapping
import org.jetbrains.kotlin.utils.addToStdlib.sumByLong import org.jetbrains.kotlin.utils.addToStdlib.sumByLong
import java.io.File
import java.io.PrintStream import java.io.PrintStream
import java.text.DecimalFormat import java.text.DecimalFormat
import kotlin.math.max import kotlin.math.max
@@ -114,7 +109,7 @@ class FirResolveBench(val withProgress: Boolean, val listener: BenchListener? =
private val errorTypesReports = mutableMapOf<String, ErrorTypeReport>() private val errorTypesReports = mutableMapOf<String, ErrorTypeReport>()
fun buildFiles( fun buildFiles(
builder: RawFirBuilder, builder: PsiRawFirBuilder,
files: Collection<KtPsiSourceFile> files: Collection<KtPsiSourceFile>
): List<FirFile> { ): List<FirFile> {
listener?.before() listener?.before()
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
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.declarations.FirFile
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
@@ -70,7 +70,7 @@ class FirAnalyzerFacade(
} }
} }
FirParser.Psi -> { FirParser.Psi -> {
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider) val builder = PsiRawFirBuilder(session, firProvider.kotlinScopeProvider)
ktFiles.map { ktFiles.map {
builder.buildFirFile(it).also { firFile -> builder.buildFirFile(it).also { firFile ->
firProvider.recordFile(firFile) firProvider.recordFile(firFile)