FIR2IR: pass external builtins to module descriptor

to support scenario when builtins are deserialized from KLib
This commit is contained in:
Ilya Chernikov
2022-08-16 11:46:34 +02:00
parent af5d74e888
commit 30df65c321
6 changed files with 35 additions and 24 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.pipeline
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
@@ -44,7 +45,9 @@ fun FirSession.convertToIr(
FirJvmKotlinMangler(this),
JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions, true
irGeneratorExtensions,
kotlinBuiltIns = DefaultBuiltIns.Instance, // TODO: consider passing externally
generateSignatures = true,
)
} else {
return Fir2IrConverter.createModuleFragmentWithoutSignatures(
@@ -53,7 +56,8 @@ fun FirSession.convertToIr(
FirJvmKotlinMangler(this),
JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions
irGeneratorExtensions,
kotlinBuiltIns = DefaultBuiltIns.Instance // TODO: consider passing externally
)
}
}
@@ -9,6 +9,8 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtPsiSourceFileLinesMapping
import org.jetbrains.kotlin.KtSourceFileLinesMappingFromLineStartOffsets
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.LanguageFeature
@@ -423,13 +425,15 @@ class Fir2IrConverter(
visibilityConverter: Fir2IrVisibilityConverter,
specialSymbolProvider: Fir2IrSpecialSymbolProvider,
irGenerationExtensions: Collection<IrGenerationExtension>,
generateSignatures: Boolean
generateSignatures: Boolean,
kotlinBuiltIns: KotlinBuiltIns
): Fir2IrResult {
if (!generateSignatures) {
return createModuleFragmentWithoutSignatures(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, mangler, irMangler, irFactory,
visibilityConverter, specialSymbolProvider, irGenerationExtensions
visibilityConverter, specialSymbolProvider, irGenerationExtensions,
kotlinBuiltIns
)
}
val signatureComposer = FirBasedSignatureComposer(mangler)
@@ -439,7 +443,7 @@ class Fir2IrConverter(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, irMangler, irFactory, visibilityConverter,
specialSymbolProvider, irGenerationExtensions, signatureComposer,
symbolTable, generateSignatures = true
symbolTable, generateSignatures = true, kotlinBuiltIns = kotlinBuiltIns
)
}
@@ -454,7 +458,8 @@ class Fir2IrConverter(
irFactory: IrFactory,
visibilityConverter: Fir2IrVisibilityConverter,
specialSymbolProvider: Fir2IrSpecialSymbolProvider,
irGenerationExtensions: Collection<IrGenerationExtension>
irGenerationExtensions: Collection<IrGenerationExtension>,
kotlinBuiltIns: KotlinBuiltIns
): Fir2IrResult {
val signatureComposer = FirBasedSignatureComposer(mangler)
val signaturer = DescriptorSignatureComposerStub()
@@ -463,7 +468,7 @@ class Fir2IrConverter(
session, scopeSession, firFiles, languageVersionSettings,
fir2IrExtensions, irMangler, irFactory, visibilityConverter,
specialSymbolProvider, irGenerationExtensions, signatureComposer,
symbolTable, generateSignatures = false
symbolTable, generateSignatures = false, kotlinBuiltIns = kotlinBuiltIns
)
}
@@ -480,9 +485,10 @@ class Fir2IrConverter(
irGenerationExtensions: Collection<IrGenerationExtension>,
signatureComposer: FirBasedSignatureComposer,
symbolTable: SymbolTable,
generateSignatures: Boolean
generateSignatures: Boolean,
kotlinBuiltIns: KotlinBuiltIns
): Fir2IrResult {
val moduleDescriptor = FirModuleDescriptor(session)
val moduleDescriptor = FirModuleDescriptor(session, kotlinBuiltIns)
val components = Fir2IrComponentsStorage(
session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions, generateSignatures
)
@@ -501,7 +507,7 @@ class Fir2IrConverter(
val irBuiltIns =
IrBuiltInsOverFir(
components, languageVersionSettings, moduleDescriptor, irMangler,
languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources)
languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources) || kotlinBuiltIns !== DefaultBuiltIns.Instance
)
components.irBuiltIns = irBuiltIns
val conversionScope = Fir2IrConversionScope()
@@ -231,7 +231,7 @@ class Fir2IrDeclarationStorage(
// But keep original module descriptor for the fragments coming from parts compiled on the previous incremental step
val externalFragmentModuleDescriptor =
if (firOrigin == FirDeclarationOrigin.Precompiled) moduleDescriptor
else FirModuleDescriptor(session)
else FirModuleDescriptor(session, moduleDescriptor.builtIns)
symbolTable.declareExternalPackageFragment(FirPackageFragmentDescriptor(fqName, externalFragmentModuleDescriptor))
}
}
@@ -10,15 +10,16 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
class FirModuleDescriptor(
val session: FirSession,
override val builtIns: KotlinBuiltIns
get() = DefaultBuiltIns.Instance
) : ModuleDescriptor {
override fun shouldSeeInternalsOf(targetModule: ModuleDescriptor): Boolean {
return false
}
@@ -38,8 +39,8 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
TODO("not implemented")
}
override val allDependencyModules: List<ModuleDescriptor>
get() = TODO("not implemented")
override var allDependencyModules: List<ModuleDescriptor> = emptyList()
override val expectedByModules: List<ModuleDescriptor>
get() = TODO("not implemented")
override val allExpectedByModules: Set<ModuleDescriptor>
@@ -61,10 +62,10 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
}
override fun getName(): Name {
return FIR_MODULE_NAME
return session.moduleData.name
}
override val stableName: Name?
override val stableName: Name
get() = name
override fun acceptVoid(visitor: DeclarationDescriptorVisitor<Void, Void>?) {
@@ -73,8 +74,4 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
override val annotations: Annotations
get() = Annotations.EMPTY
companion object {
val FIR_MODULE_NAME = Name.identifier("module for FIR session")
}
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.build.report.BuildReporter
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
@@ -281,7 +282,8 @@ class IncrementalFirJvmCompilerRunner(
cycleResult.session.languageVersionSettings, extensions,
FirJvmKotlinMangler(cycleResult.session), JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGenerationExtensions
irGenerationExtensions,
kotlinBuiltIns = DefaultBuiltIns.Instance // TODO: consider passing externally
)
performanceManager?.notifyIRTranslationFinished()
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
@@ -119,7 +120,8 @@ class FirAnalyzerFacade(
FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions,
generateSignatures
generateSignatures,
kotlinBuiltIns = DefaultBuiltIns.Instance // TODO: consider passing externally
)
}
}