FIR2IR: pass external builtins to module descriptor
to support scenario when builtins are deserialized from KLib
This commit is contained in:
@@ -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()
|
||||
|
||||
+1
-1
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
+8
-11
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user