[K2] Add languageVersionSettings to Fir2IrConfiguration class

This commit is contained in:
Ivan Kylchik
2023-03-30 13:32:04 +02:00
committed by Space Team
parent e16231104e
commit fe989d0ba7
12 changed files with 36 additions and 29 deletions
@@ -130,7 +130,10 @@ fun transformFirToIr(
val firResult = FirResult(firOutputs) val firResult = FirResult(firOutputs)
return firResult.convertToIrAndActualize( return firResult.convertToIrAndActualize(
fir2IrExtensions, fir2IrExtensions,
Fir2IrConfiguration(linkViaSignatures = false), Fir2IrConfiguration(
languageVersionSettings = moduleStructure.compilerConfiguration.languageVersionSettings,
linkViaSignatures = false
),
IrGenerationExtension.getInstances(moduleStructure.project), IrGenerationExtension.getInstances(moduleStructure.project),
signatureComposerCreator = null, signatureComposerCreator = null,
irMangler = JsManglerIr, irMangler = JsManglerIr,
@@ -138,7 +141,6 @@ fun transformFirToIr(
visibilityConverter = Fir2IrVisibilityConverter.Default, visibilityConverter = Fir2IrVisibilityConverter.Default,
kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance, kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance,
diagnosticReporter = diagnosticsReporter, diagnosticReporter = diagnosticsReporter,
languageVersionSettings = moduleStructure.compilerConfiguration.languageVersionSettings,
fir2IrResultPostCompute = { fir2IrResultPostCompute = {
(this.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors } (this.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors }
} }
@@ -154,6 +154,7 @@ object FirKotlinToJvmBytecodeCompiler {
val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler) val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler)
val fir2IrConfiguration = Fir2IrConfiguration( val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = moduleConfiguration.languageVersionSettings,
linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES) linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
) )
val fir2IrAndIrActualizerResult = firResult.convertToIrAndActualizeForJvm( val fir2IrAndIrActualizerResult = firResult.convertToIrAndActualizeForJvm(
@@ -161,7 +162,6 @@ object FirKotlinToJvmBytecodeCompiler {
fir2IrConfiguration, fir2IrConfiguration,
irGenerationExtensions, irGenerationExtensions,
diagnosticsReporter, diagnosticsReporter,
moduleConfiguration.languageVersionSettings
) )
performanceManager?.notifyIRTranslationFinished() performanceManager?.notifyIRTranslationFinished()
@@ -232,12 +232,12 @@ fun convertAnalyzedFirToIr(
IrGenerationExtension.getInstances(it) IrGenerationExtension.getInstances(it)
} ?: emptyList() } ?: emptyList()
val fir2IrConfiguration = Fir2IrConfiguration( val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = input.configuration.languageVersionSettings,
linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES) linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
) )
val (irModuleFragment, components, pluginContext, irActualizedResult) = val (irModuleFragment, components, pluginContext, irActualizedResult) =
analysisResults.convertToIrAndActualizeForJvm( analysisResults.convertToIrAndActualizeForJvm(
extensions, fir2IrConfiguration, irGenerationExtensions, extensions, fir2IrConfiguration, irGenerationExtensions, environment.diagnosticsReporter,
environment.diagnosticsReporter, input.configuration.languageVersionSettings
) )
return ModuleCompilerIrBackendInput( return ModuleCompilerIrBackendInput(
@@ -49,7 +49,6 @@ fun FirResult.convertToIrAndActualizeForJvm(
fir2IrConfiguration: Fir2IrConfiguration, fir2IrConfiguration: Fir2IrConfiguration,
irGeneratorExtensions: Collection<IrGenerationExtension>, irGeneratorExtensions: Collection<IrGenerationExtension>,
diagnosticReporter: DiagnosticReporter, diagnosticReporter: DiagnosticReporter,
languageVersionSettings: LanguageVersionSettings,
): Fir2IrActualizedResult = this.convertToIrAndActualize( ): Fir2IrActualizedResult = this.convertToIrAndActualize(
fir2IrExtensions, fir2IrExtensions,
fir2IrConfiguration, fir2IrConfiguration,
@@ -59,7 +58,6 @@ fun FirResult.convertToIrAndActualizeForJvm(
firManglerCreator = { FirJvmKotlinMangler() }, firManglerCreator = { FirJvmKotlinMangler() },
visibilityConverter = FirJvmVisibilityConverter, visibilityConverter = FirJvmVisibilityConverter,
diagnosticReporter = diagnosticReporter, diagnosticReporter = diagnosticReporter,
languageVersionSettings = languageVersionSettings,
kotlinBuiltIns = DefaultBuiltIns.Instance, kotlinBuiltIns = DefaultBuiltIns.Instance,
) )
@@ -73,7 +71,6 @@ fun FirResult.convertToIrAndActualize(
visibilityConverter: Fir2IrVisibilityConverter, visibilityConverter: Fir2IrVisibilityConverter,
kotlinBuiltIns: KotlinBuiltIns, kotlinBuiltIns: KotlinBuiltIns,
diagnosticReporter: DiagnosticReporter, diagnosticReporter: DiagnosticReporter,
languageVersionSettings: LanguageVersionSettings,
fir2IrResultPostCompute: Fir2IrResult.() -> Unit = {}, fir2IrResultPostCompute: Fir2IrResult.() -> Unit = {},
): Fir2IrActualizedResult { ): Fir2IrActualizedResult {
val fir2IrResult: Fir2IrResult val fir2IrResult: Fir2IrResult
@@ -140,7 +137,7 @@ fun FirResult.convertToIrAndActualize(
fir2IrResult.irModuleFragment, fir2IrResult.irModuleFragment,
commonIrOutputs.map { it.irModuleFragment }, commonIrOutputs.map { it.irModuleFragment },
diagnosticReporter, diagnosticReporter,
languageVersionSettings fir2IrConfiguration.languageVersionSettings
) )
} }
} }
@@ -161,7 +158,7 @@ private fun ModuleCompilerAnalyzedOutput.convertToIr(
): Fir2IrResult { ): Fir2IrResult {
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
session, scopeSession, fir, session, scopeSession, fir,
session.languageVersionSettings, fir2IrExtensions, fir2IrConfiguration, fir2IrExtensions, fir2IrConfiguration,
irMangler, IrFactoryImpl, visibilityConverter, irMangler, IrFactoryImpl, visibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation for other backends. Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation for other backends.
irGeneratorExtensions, irGeneratorExtensions,
@@ -16,6 +16,9 @@
package org.jetbrains.kotlin.fir.backend package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.config.LanguageVersionSettings
data class Fir2IrConfiguration( data class Fir2IrConfiguration(
val languageVersionSettings: LanguageVersionSettings,
val linkViaSignatures: Boolean val linkViaSignatures: Boolean
) )
@@ -440,7 +440,6 @@ class Fir2IrConverter(
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firFiles: List<FirFile>, firFiles: List<FirFile>,
languageVersionSettings: LanguageVersionSettings,
fir2IrExtensions: Fir2IrExtensions, fir2IrExtensions: Fir2IrExtensions,
fir2IrConfiguration: Fir2IrConfiguration, fir2IrConfiguration: Fir2IrConfiguration,
irMangler: KotlinMangler.IrMangler, irMangler: KotlinMangler.IrMangler,
@@ -471,8 +470,8 @@ class Fir2IrConverter(
components.visibilityConverter = visibilityConverter components.visibilityConverter = visibilityConverter
components.typeConverter = Fir2IrTypeConverter(components) components.typeConverter = Fir2IrTypeConverter(components)
val irBuiltIns = initializedIrBuiltIns ?: IrBuiltInsOverFir( val irBuiltIns = initializedIrBuiltIns ?: IrBuiltInsOverFir(
components, languageVersionSettings, moduleDescriptor, irMangler, components, fir2IrConfiguration.languageVersionSettings, moduleDescriptor, irMangler,
languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources) || kotlinBuiltIns !== DefaultBuiltIns.Instance fir2IrConfiguration.languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources) || kotlinBuiltIns !== DefaultBuiltIns.Instance
) )
components.irBuiltIns = irBuiltIns components.irBuiltIns = irBuiltIns
val conversionScope = Fir2IrConversionScope() val conversionScope = Fir2IrConversionScope()
@@ -274,15 +274,14 @@ class IncrementalFirJvmCompilerRunner(
performanceManager?.notifyIRTranslationStarted() performanceManager?.notifyIRTranslationStarted()
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler) val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
val fir2IrConfiguration = Fir2IrConfiguration(linkViaSignatures = false) val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
linkViaSignatures = false
)
val irGenerationExtensions = val irGenerationExtensions =
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty() (projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
val (irModuleFragment, components, pluginContext, irActualizedResult) = cycleResult.convertToIrAndActualizeForJvm( val (irModuleFragment, components, pluginContext, irActualizedResult) = cycleResult.convertToIrAndActualizeForJvm(
extensions, extensions, fir2IrConfiguration, irGenerationExtensions, compilerEnvironment.diagnosticsReporter,
fir2IrConfiguration,
irGenerationExtensions,
compilerEnvironment.diagnosticsReporter,
configuration.languageVersionSettings
) )
performanceManager?.notifyIRTranslationFinished() performanceManager?.notifyIRTranslationFinished()
@@ -147,11 +147,14 @@ fun AbstractFirAnalyzerFacade.convertToJsIr(
val libraries = resolveJsLibraries(module, testServices, configuration) val libraries = resolveJsLibraries(module, testServices, configuration)
val (dependencies, builtIns) = loadResolvedLibraries(libraries, configuration.languageVersionSettings, testServices) val (dependencies, builtIns) = loadResolvedLibraries(libraries, configuration.languageVersionSettings, testServices)
val fir2IrConfiguration = Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
linkViaSignatures = false
)
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
session, scopeSession, firFiles.toList(), session, scopeSession, firFiles.toList(),
languageVersionSettings,
fir2IrExtensions, fir2IrExtensions,
Fir2IrConfiguration(linkViaSignatures = false), fir2IrConfiguration,
JsManglerIr, IrFactoryImpl, JsManglerIr, IrFactoryImpl,
Fir2IrVisibilityConverter.Default, Fir2IrVisibilityConverter.Default,
Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation
@@ -304,8 +304,10 @@ open class FirFrontendFacade(
val enablePluginPhases = FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES in module.directives val enablePluginPhases = FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES in module.directives
val firAnalyzerFacade = FirAnalyzerFacade( val firAnalyzerFacade = FirAnalyzerFacade(
moduleBasedSession, moduleBasedSession,
module.languageVersionSettings, Fir2IrConfiguration(
Fir2IrConfiguration(linkViaSignatures = module.targetBackend == TargetBackend.JVM_IR_SERIALIZE), languageVersionSettings = module.languageVersionSettings,
linkViaSignatures = module.targetBackend == TargetBackend.JVM_IR_SERIALIZE
),
ktFiles, ktFiles,
lightTreeFiles, lightTreeFiles,
IrGenerationExtension.getInstances(project), IrGenerationExtension.getInstances(project),
@@ -122,8 +122,10 @@ object GenerationUtils {
// TODO: add running checkers and check that it's safe to compile // TODO: add running checkers and check that it's safe to compile
val firAnalyzerFacade = FirAnalyzerFacade( val firAnalyzerFacade = FirAnalyzerFacade(
session, session,
configuration.languageVersionSettings, Fir2IrConfiguration(
Fir2IrConfiguration(linkViaSignatures = false), languageVersionSettings = configuration.languageVersionSettings,
linkViaSignatures = false
),
files, files,
emptyList(), emptyList(),
IrGenerationExtension.getInstances(project), IrGenerationExtension.getInstances(project),
@@ -42,7 +42,6 @@ abstract class AbstractFirAnalyzerFacade {
class FirAnalyzerFacade( class FirAnalyzerFacade(
val session: FirSession, val session: FirSession,
val languageVersionSettings: LanguageVersionSettings,
val fir2IrConfiguration: Fir2IrConfiguration, val fir2IrConfiguration: Fir2IrConfiguration,
val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled
val lightTreeFiles: Collection<LightTreeFile> = emptyList(), // may be empty if light tree mode disabled val lightTreeFiles: Collection<LightTreeFile> = emptyList(), // may be empty if light tree mode disabled
@@ -114,7 +113,6 @@ class FirAnalyzerFacade(
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
session, _scopeSession!!, firFiles!!, session, _scopeSession!!, firFiles!!,
languageVersionSettings,
fir2IrExtensions, fir2IrExtensions,
fir2IrConfiguration, fir2IrConfiguration,
JvmIrMangler, IrFactoryImpl, JvmIrMangler, IrFactoryImpl,
@@ -73,14 +73,16 @@ internal fun PhaseContext.fir2Ir(
val (irModuleFragment, components, pluginContext, irActualizedResult) = input.firResult.convertToIrAndActualize( val (irModuleFragment, components, pluginContext, irActualizedResult) = input.firResult.convertToIrAndActualize(
fir2IrExtensions, fir2IrExtensions,
Fir2IrConfiguration(linkViaSignatures = false), Fir2IrConfiguration(
languageVersionSettings = configuration.languageVersionSettings,
linkViaSignatures = false
),
IrGenerationExtension.getInstances(config.project), IrGenerationExtension.getInstances(config.project),
signatureComposerCreator = null, signatureComposerCreator = null,
irMangler = KonanManglerIr, irMangler = KonanManglerIr,
firManglerCreator = { FirNativeKotlinMangler() }, firManglerCreator = { FirNativeKotlinMangler() },
visibilityConverter = Fir2IrVisibilityConverter.Default, visibilityConverter = Fir2IrVisibilityConverter.Default,
diagnosticReporter = diagnosticsReporter, diagnosticReporter = diagnosticsReporter,
languageVersionSettings = configuration.languageVersionSettings,
kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance, kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance,
fir2IrResultPostCompute = { fir2IrResultPostCompute = {
// it's important to compare manglers before actualization, since IR will be actualized, while FIR won't // it's important to compare manglers before actualization, since IR will be actualized, while FIR won't