diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index 5ce6638b3bd..eaf9c1b73e3 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -410,6 +410,7 @@ class K2JsIrCompiler : CLICompiler() { ir.context, mainCallArguments, relativeRequirePath = true, + moduleToName = ir.moduleFragmentToUniqueName ) transformer.generateModule(ir.allModules, setOf(TranslationMode.fromFlags(arguments.irDce, arguments.irPerModule))) @@ -421,6 +422,7 @@ class K2JsIrCompiler : CLICompiler() { dceJs = arguments.irDce, multiModule = arguments.irPerModule, relativeRequirePath = true, + moduleToName = ir.moduleFragmentToUniqueName ) transformer.generateModule(ir.allModules) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index 0dfc546b361..3b0cbf10c7f 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -41,7 +41,8 @@ class CompilationOutputs( class LoweredIr( val context: JsIrBackendContext, val mainModule: IrModuleFragment, - val allModules: List + val allModules: List, + val moduleFragmentToUniqueName: Map, ) fun compile( @@ -60,7 +61,7 @@ fun compile( icCompatibleIr2Js: Boolean = false, ): LoweredIr { - val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer) = + val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) = loadIr(depsDescriptors, irFactory, verifySignatures, filesToLower, loadFunctionInterfacesIntoStdlib = true) return compileIr( @@ -68,6 +69,7 @@ fun compile( depsDescriptors.mainModule, depsDescriptors.compilerConfiguration, dependencyModules, + moduleToName, irBuiltIns, symbolTable, deserializer, @@ -88,6 +90,7 @@ fun compileIr( mainModule: MainModule, configuration: CompilerConfiguration, dependencyModules: List, + moduleToName: Map, irBuiltIns: IrBuiltIns, symbolTable: SymbolTable, deserializer: JsIrLinker, @@ -147,7 +150,7 @@ fun compileIr( lowerPreservingTags(allModules, context, phaseConfig, it) } ?: jsPhases.invokeToplevel(phaseConfig, context, allModules) - return LoweredIr(context, moduleFragment, allModules) + return LoweredIr(context, moduleFragment, allModules, moduleToName) } fun generateJsCode( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt index eccbd26de31..5a0c9e59130 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt @@ -331,7 +331,7 @@ fun generateWrappedModuleBody( ) val dependencies = others.map { module -> - val moduleName = module.moduleName + val moduleName = module.externalModuleName moduleName to generateSingleWrappedModuleBody( moduleName, diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index e0b2e49ef43..356e4df67dd 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -244,7 +244,8 @@ data class IrModuleInfo( val allDependencies: List, val bultins: IrBuiltIns, val symbolTable: SymbolTable, - val deserializer: JsIrLinker + val deserializer: JsIrLinker, + val moduleFragmentToUniqueName: Map, ) fun sortDependencies(mapping: Map): Collection { @@ -390,7 +391,14 @@ fun getIrModuleInfoForKlib( ExternalDependenciesGenerator(symbolTable, listOf(irLinker)).generateUnboundSymbolsAsDependencies() irLinker.postProcess() - return IrModuleInfo(moduleFragment, deserializedModuleFragments, irBuiltIns, symbolTable, irLinker) + return IrModuleInfo( + moduleFragment, + deserializedModuleFragments, + irBuiltIns, + symbolTable, + irLinker, + deserializedModuleFragmentsToLib.getUniqueNameForEachFragment() + ) } @OptIn(ObsoleteDescriptorBasedAPI::class) @@ -457,7 +465,14 @@ fun getIrModuleInfoForSourceFiles( irBuiltIns.knownBuiltins.forEach { it.acceptVoid(mangleChecker) } } - return IrModuleInfo(moduleFragment, deserializedModuleFragments, irBuiltIns, symbolTable, irLinker) + return IrModuleInfo( + moduleFragment, + deserializedModuleFragments, + irBuiltIns, + symbolTable, + irLinker, + deserializedModuleFragmentsToLib.getUniqueNameForEachFragment() + ) } fun prepareAnalyzedSourceModule( @@ -830,3 +845,11 @@ private fun KlibMetadataIncrementalSerializer(configuration: CompilerConfigurati skipExpects = !configuration.expectActualLinker, allowErrorTypes = allowErrors ) + +private fun Map.getUniqueNameForEachFragment(): Map { + return this.entries.mapNotNull { (moduleFragment, klib) -> + klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let { + moduleFragment to it + } + }.toMap() +} diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt index e71e033d735..f12aeb3bb6c 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt @@ -128,6 +128,7 @@ class JsIrBackendFacade( MainModule.Klib(inputArtifact.outputFile.absolutePath), configuration, dependencyModules, + emptyMap(), irModuleFragment.irBuiltins, symbolTable, deserializer,