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 bb841b31dd6..660dcfd24dd 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 @@ -159,7 +159,7 @@ object FirKotlinToJvmBytecodeCompiler { performanceManager?.notifyIRTranslationStarted() val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler) - val fir2IrResult = firResult.convertToIrAndActualize( + val fir2IrResult = firResult.convertToIrAndActualizeForJvm( fir2IrExtensions, irGenerationExtensions, linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES) 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 45bbba83d02..0a642fa3bd3 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 @@ -221,7 +221,7 @@ fun convertAnalyzedFirToIr( } ?: emptyList() val linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES) val (irModuleFragment, components, pluginContext) = - analysisResults.convertToIrAndActualize(extensions, irGenerationExtensions, linkViaSignatures) + analysisResults.convertToIrAndActualizeForJvm(extensions, irGenerationExtensions, linkViaSignatures) return ModuleCompilerIrBackendInput( input.targetId, 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 29af05a5702..655c573fc84 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,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer 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.builtins.KotlinBuiltIns import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider @@ -20,6 +21,8 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl +import org.jetbrains.kotlin.ir.util.IdSignatureComposer +import org.jetbrains.kotlin.ir.util.KotlinMangler data class FirResult( val platformOutput: ModuleCompilerAnalyzedOutput, @@ -32,17 +35,35 @@ data class ModuleCompilerAnalyzedOutput( val fir: List ) +fun FirResult.convertToIrAndActualizeForJvm( + fir2IrExtensions: Fir2IrExtensions, + irGeneratorExtensions: Collection, + linkViaSignatures: Boolean, +): Fir2IrResult = this.convertToIrAndActualize( + fir2IrExtensions, + irGeneratorExtensions, + linkViaSignatures = linkViaSignatures, + signatureComposerCreator = { JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) }, + irMangler = JvmIrMangler, + visibilityConverter = FirJvmVisibilityConverter, + kotlinBuiltIns = DefaultBuiltIns.Instance, +) + fun FirResult.convertToIrAndActualize( fir2IrExtensions: Fir2IrExtensions, irGeneratorExtensions: Collection, linkViaSignatures: Boolean, + signatureComposerCreator: (() -> IdSignatureComposer)?, + irMangler: KotlinMangler.IrMangler, + visibilityConverter: Fir2IrVisibilityConverter, + kotlinBuiltIns: KotlinBuiltIns, ): Fir2IrResult { val result: Fir2IrResult val commonMemberStorage = Fir2IrCommonMemberStorage( generateSignatures = linkViaSignatures, - signatureComposerCreator = { JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) }, - manglerCreator = { FirJvmKotlinMangler() } + signatureComposerCreator = signatureComposerCreator, + manglerCreator = { FirJvmKotlinMangler() } // TODO: replace with potentially simpler version for other backends. ) if (commonOutput != null) { @@ -51,14 +72,20 @@ fun FirResult.convertToIrAndActualize( irGeneratorExtensions, linkViaSignatures = linkViaSignatures, commonMemberStorage = commonMemberStorage, - irBuiltIns = null + irBuiltIns = null, + irMangler, + visibilityConverter, + kotlinBuiltIns, ) result = platformOutput.convertToIr( fir2IrExtensions, irGeneratorExtensions, linkViaSignatures = linkViaSignatures, commonMemberStorage = commonMemberStorage, - irBuiltIns = commonIrOutput.components.irBuiltIns + irBuiltIns = commonIrOutput.components.irBuiltIns, + irMangler, + visibilityConverter, + kotlinBuiltIns, ) IrActualizer.actualize( result.irModuleFragment, @@ -70,7 +97,10 @@ fun FirResult.convertToIrAndActualize( irGeneratorExtensions, linkViaSignatures = linkViaSignatures, commonMemberStorage = commonMemberStorage, - irBuiltIns = null + irBuiltIns = null, + irMangler, + visibilityConverter, + kotlinBuiltIns, ) } @@ -82,15 +112,18 @@ private fun ModuleCompilerAnalyzedOutput.convertToIr( irGeneratorExtensions: Collection, linkViaSignatures: Boolean, commonMemberStorage: Fir2IrCommonMemberStorage, - irBuiltIns: IrBuiltInsOverFir? + irBuiltIns: IrBuiltInsOverFir?, + irMangler: KotlinMangler.IrMangler, + visibilityConverter: Fir2IrVisibilityConverter, + kotlinBuiltIns: KotlinBuiltIns, ): Fir2IrResult { return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( session, scopeSession, fir, session.languageVersionSettings, fir2IrExtensions, - JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter, - Fir2IrJvmSpecialAnnotationSymbolProvider(), + irMangler, IrFactoryImpl, visibilityConverter, + Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation for other backends. irGeneratorExtensions, - kotlinBuiltIns = DefaultBuiltIns.Instance, // TODO: consider passing externally + kotlinBuiltIns = kotlinBuiltIns, generateSignatures = linkViaSignatures, commonMemberStorage = commonMemberStorage, initializedIrBuiltIns = irBuiltIns 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 2dc4530659f..02901c40b42 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 @@ -50,7 +50,7 @@ import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.pipeline.FirResult import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput -import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize +import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope @@ -275,7 +275,7 @@ class IncrementalFirJvmCompilerRunner( val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler) val irGenerationExtensions = (projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty() - val platformIrOutput = cycleResult.convertToIrAndActualize(extensions, irGenerationExtensions, linkViaSignatures = false) + val platformIrOutput = cycleResult.convertToIrAndActualizeForJvm(extensions, irGenerationExtensions, linkViaSignatures = false) performanceManager?.notifyIRTranslationFinished()