diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt index 6ca407b8547..0b0abafa36e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt @@ -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, - ): 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, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 64b3f5b1bf5..40242b2af7c 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -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, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt index b4a93ffbfc3..5979497333e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt @@ -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, +): 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, diff --git a/compiler/fir/entrypoint/build.gradle.kts b/compiler/fir/entrypoint/build.gradle.kts index ec3bef1e147..115fdbdbf31 100644 --- a/compiler/fir/entrypoint/build.gradle.kts +++ b/compiler/fir/entrypoint/build.gradle.kts @@ -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")) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt index 40998d0e09c..e6b6f82b793 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt @@ -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, -): 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) { diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt index 8a58d5e3b9a..c2b8ef0d732 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt @@ -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()