FIR entrypoint: deduplicate some code and remove JVM dependency
Deduplicate Fir2IrExtensions creation and move the convertToIrAndActualizeForJvm function to 'cli', which allows to remove the dependency of 'fir.entrypoint' on 'backend.jvm'. Note that behavior slightly changes in IncrementalFirJvmCompilerRunner: previously the value of linkViaSignatures was always false, now it is taken from the compiler configuration, which seems more correct.
This commit is contained in:
committed by
Space Team
parent
420fbad73d
commit
4fca52b66c
+3
-33
@@ -17,21 +17,17 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerIrBackendInput
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.generateCodeFromIr
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.diagnostics.impl.PendingDiagnosticsCollectorWithSuppress
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
@@ -41,7 +37,6 @@ import org.jetbrains.kotlin.fir.packageFqName
|
||||
import org.jetbrains.kotlin.fir.pipeline.Fir2IrActualizedResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirFromKtFiles
|
||||
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.fir.types.arrayElementType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.isArrayType
|
||||
@@ -163,9 +158,8 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
performanceManager?.notifyIRTranslationStarted()
|
||||
|
||||
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||
val fir2IrAndIrActualizerResult = convertToIrAndActualizeForJvm(
|
||||
firResult, diagnosticsReporter, fir2IrExtensions, irGenerationExtensions
|
||||
)
|
||||
val fir2IrAndIrActualizerResult =
|
||||
firResult.convertToIrAndActualizeForJvm(fir2IrExtensions, configuration, diagnosticsReporter, irGenerationExtensions)
|
||||
|
||||
performanceManager?.notifyIRTranslationFinished()
|
||||
|
||||
@@ -230,30 +224,6 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
return runUnless(syntaxErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
||||
}
|
||||
|
||||
fun FrontendContext.convertToIrAndActualizeForJvm(
|
||||
firResult: FirResult,
|
||||
diagnosticsReporter: DiagnosticReporter,
|
||||
fir2IrExtensions: JvmFir2IrExtensions,
|
||||
irGenerationExtensions: Collection<IrGenerationExtension>,
|
||||
): Fir2IrActualizedResult {
|
||||
val fir2IrConfiguration = Fir2IrConfiguration(
|
||||
languageVersionSettings = configuration.languageVersionSettings,
|
||||
diagnosticReporter = diagnosticsReporter,
|
||||
linkViaSignatures = configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
|
||||
evaluatedConstTracker = configuration
|
||||
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
|
||||
inlineConstTracker = configuration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
|
||||
expectActualTracker = configuration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
|
||||
allowNonCachedDeclarations = false,
|
||||
useIrFakeOverrideBuilder = configuration.getBoolean(CommonConfigurationKeys.USE_IR_FAKE_OVERRIDE_BUILDER),
|
||||
)
|
||||
return firResult.convertToIrAndActualizeForJvm(
|
||||
fir2IrExtensions,
|
||||
fir2IrConfiguration,
|
||||
irGenerationExtensions,
|
||||
)
|
||||
}
|
||||
|
||||
private fun CompilationContext.runBackend(
|
||||
fir2IrExtensions: JvmFir2IrExtensions,
|
||||
fir2IrActualizedResult: Fir2IrActualizedResult,
|
||||
|
||||
+3
-4
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
||||
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.common.toLogger
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.FirKotlinToJvmBytecodeCompiler.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.FirKotlinToJvmBytecodeCompiler.runFrontend
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.cli.jvm.config.*
|
||||
import org.jetbrains.kotlin.cli.jvm.config.ClassicFrontendSpecificJvmConfigurationKeys.JAVA_CLASSES_TRACKER
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
|
||||
@@ -178,9 +178,8 @@ object KotlinToJVMBytecodeCompiler {
|
||||
// K2/PSI: FIR2IR
|
||||
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||
val irGenerationExtensions = IrGenerationExtension.getInstances(project)
|
||||
val fir2IrAndIrActualizerResult = convertToIrAndActualizeForJvm(
|
||||
firResult, diagnosticsReporter, fir2IrExtensions, irGenerationExtensions
|
||||
)
|
||||
val fir2IrAndIrActualizerResult =
|
||||
firResult.convertToIrAndActualizeForJvm(fir2IrExtensions, configuration, diagnosticsReporter, irGenerationExtensions)
|
||||
val (factory, input) = fir2IrAndIrActualizerResult.codegenFactoryWithJvmIrBackendInput(configuration)
|
||||
return BackendInputForMultiModuleChunk(
|
||||
factory,
|
||||
|
||||
+38
-19
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.cli.common.*
|
||||
import org.jetbrains.kotlin.cli.common.fir.reportToMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
@@ -41,16 +43,14 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.*
|
||||
import org.jetbrains.kotlin.fir.extensions.FirAnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirViaLightTree
|
||||
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.fir.pipeline.*
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.session.IncrementalCompilationContext
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
@@ -172,25 +172,13 @@ fun convertAnalyzedFirToIr(
|
||||
): ModuleCompilerIrBackendInput {
|
||||
val extensions = JvmFir2IrExtensions(input.configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||
|
||||
// fir2ir
|
||||
val irGenerationExtensions =
|
||||
(environment.projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let {
|
||||
IrGenerationExtension.getInstances(it)
|
||||
} ?: emptyList()
|
||||
val fir2IrConfiguration = Fir2IrConfiguration(
|
||||
languageVersionSettings = input.configuration.languageVersionSettings,
|
||||
diagnosticReporter = environment.diagnosticsReporter,
|
||||
linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
|
||||
evaluatedConstTracker = input.configuration
|
||||
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
|
||||
inlineConstTracker = input.configuration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
|
||||
expectActualTracker = input.configuration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
|
||||
allowNonCachedDeclarations = false,
|
||||
useIrFakeOverrideBuilder = input.configuration.getBoolean(CommonConfigurationKeys.USE_IR_FAKE_OVERRIDE_BUILDER),
|
||||
)
|
||||
val (moduleFragment, components, pluginContext, irActualizedResult) =
|
||||
analysisResults.convertToIrAndActualizeForJvm(
|
||||
extensions, fir2IrConfiguration, irGenerationExtensions,
|
||||
extensions, input.configuration, environment.diagnosticsReporter, irGenerationExtensions,
|
||||
)
|
||||
|
||||
return ModuleCompilerIrBackendInput(
|
||||
@@ -204,6 +192,37 @@ fun convertAnalyzedFirToIr(
|
||||
)
|
||||
}
|
||||
|
||||
fun FirResult.convertToIrAndActualizeForJvm(
|
||||
fir2IrExtensions: Fir2IrExtensions,
|
||||
configuration: CompilerConfiguration,
|
||||
diagnosticsReporter: DiagnosticReporter,
|
||||
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||
): Fir2IrActualizedResult {
|
||||
val fir2IrConfiguration = Fir2IrConfiguration(
|
||||
languageVersionSettings = configuration.languageVersionSettings,
|
||||
diagnosticReporter = diagnosticsReporter,
|
||||
linkViaSignatures = configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
|
||||
evaluatedConstTracker = configuration
|
||||
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
|
||||
inlineConstTracker = configuration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
|
||||
expectActualTracker = configuration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
|
||||
allowNonCachedDeclarations = false,
|
||||
useIrFakeOverrideBuilder = configuration.getBoolean(CommonConfigurationKeys.USE_IR_FAKE_OVERRIDE_BUILDER),
|
||||
)
|
||||
|
||||
return convertToIrAndActualize(
|
||||
fir2IrExtensions,
|
||||
fir2IrConfiguration,
|
||||
irGeneratorExtensions,
|
||||
signatureComposerForJvmFir2Ir(fir2IrConfiguration.linkViaSignatures),
|
||||
JvmIrMangler,
|
||||
FirJvmKotlinMangler(),
|
||||
FirJvmVisibilityConverter,
|
||||
DefaultBuiltIns.Instance,
|
||||
::JvmIrTypeSystemContext,
|
||||
)
|
||||
}
|
||||
|
||||
fun generateCodeFromIr(
|
||||
input: ModuleCompilerIrBackendInput,
|
||||
environment: ModuleCompilerEnvironment,
|
||||
|
||||
@@ -21,7 +21,7 @@ dependencies {
|
||||
implementation(project(":compiler:fir:resolve"))
|
||||
implementation(project(":compiler:fir:fir-serialization"))
|
||||
implementation(project(":compiler:fir:fir2ir:jvm-backend"))
|
||||
implementation(project(":compiler:backend.jvm"))
|
||||
implementation(project(":compiler:ir.backend.common"))
|
||||
implementation(project(":compiler:ir.serialization.common"))
|
||||
implementation(project(":compiler:ir.serialization.jvm"))
|
||||
implementation(project(":compiler:ir.serialization.js"))
|
||||
|
||||
@@ -9,20 +9,15 @@ import org.jetbrains.kotlin.backend.common.actualizer.IrActualizedResult
|
||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
|
||||
@@ -66,22 +61,6 @@ data class Fir2IrActualizedResult(
|
||||
val irActualizedResult: IrActualizedResult?,
|
||||
)
|
||||
|
||||
fun FirResult.convertToIrAndActualizeForJvm(
|
||||
fir2IrExtensions: Fir2IrExtensions,
|
||||
fir2IrConfiguration: Fir2IrConfiguration,
|
||||
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||
): Fir2IrActualizedResult = this.convertToIrAndActualize(
|
||||
fir2IrExtensions,
|
||||
fir2IrConfiguration,
|
||||
irGeneratorExtensions,
|
||||
signatureComposer = signatureComposerForJvmFir2Ir(fir2IrConfiguration.linkViaSignatures),
|
||||
irMangler = JvmIrMangler,
|
||||
firMangler = FirJvmKotlinMangler(),
|
||||
visibilityConverter = FirJvmVisibilityConverter,
|
||||
kotlinBuiltIns = DefaultBuiltIns.Instance,
|
||||
actualizerTypeContextProvider = ::JvmIrTypeSystemContext,
|
||||
)
|
||||
|
||||
fun signatureComposerForJvmFir2Ir(generateSignatures: Boolean): IdSignatureComposer {
|
||||
val mangler = JvmDescriptorMangler(null)
|
||||
return if (generateSignatures) {
|
||||
|
||||
+5
-16
@@ -29,17 +29,17 @@ import org.jetbrains.kotlin.cli.common.messages.IrMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.modules.ModuleBuilder
|
||||
import org.jetbrains.kotlin.cli.jvm.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.findMainClass
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.forAllFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.writeOutputsIfNeeded
|
||||
import org.jetbrains.kotlin.cli.jvm.config.*
|
||||
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
|
||||
@@ -271,20 +271,9 @@ open class IncrementalFirJvmCompilerRunner(
|
||||
performanceManager?.notifyIRTranslationStarted()
|
||||
|
||||
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||
val fir2IrConfiguration = Fir2IrConfiguration(
|
||||
languageVersionSettings = configuration.languageVersionSettings,
|
||||
diagnosticReporter = compilerEnvironment.diagnosticsReporter,
|
||||
linkViaSignatures = false,
|
||||
evaluatedConstTracker = configuration
|
||||
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
|
||||
inlineConstTracker = configuration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
|
||||
expectActualTracker = configuration[CommonConfigurationKeys.EXPECT_ACTUAL_TRACKER],
|
||||
allowNonCachedDeclarations = false,
|
||||
useIrFakeOverrideBuilder = configuration.getBoolean(CommonConfigurationKeys.USE_IR_FAKE_OVERRIDE_BUILDER),
|
||||
)
|
||||
val irGenerationExtensions = projectEnvironment.project.let { IrGenerationExtension.getInstances(it) }
|
||||
val (irModuleFragment, components, pluginContext, irActualizedResult) = cycleResult.convertToIrAndActualizeForJvm(
|
||||
extensions, fir2IrConfiguration, irGenerationExtensions,
|
||||
extensions, configuration, compilerEnvironment.diagnosticsReporter, irGenerationExtensions,
|
||||
)
|
||||
|
||||
performanceManager?.notifyIRTranslationFinished()
|
||||
|
||||
Reference in New Issue
Block a user