From dd7d669464e11c1fc58bb50a18b6ebae8578235b Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Mon, 12 Sep 2022 21:24:32 +0200 Subject: [PATCH] [JS IR] Use jsOutputName for module naming when IC is enabled ^KT-53986 Fixed --- .../jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt | 2 ++ .../kotlin/ir/backend/js/ic/IncrementalCache.kt | 3 ++- .../kotlin/ir/backend/js/ic/JsMultiModuleCache.kt | 2 +- .../kotlin/ir/backend/js/ic/ModuleArtifact.kt | 6 ++++-- .../src/org/jetbrains/kotlin/ir/backend/js/klib.kt | 7 ++++--- .../kotlin/incremental/AbstractInvalidationTest.kt | 10 +++++----- .../jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 4 ++-- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt index 7707fcc8540..38f60247751 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrFragmentAndBinaryAst +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.safeModuleName import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.* @@ -514,6 +515,7 @@ class CacheUpdater( } artifacts += incrementalCache.buildModuleArtifactAndCommitCache( moduleName = libFragment.name.asString(), + externalModuleName = lib.jsOutputName, rebuiltFileFragments = libRebuiltFiles, signatureToIndexMapping = signatureToIndexMapping ) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt index fa26ac80ccb..aadc85cb422 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt @@ -84,6 +84,7 @@ class IncrementalCache(private val library: KotlinLibrary, cachePath: String) { fun buildModuleArtifactAndCommitCache( moduleName: String, + externalModuleName: String?, rebuiltFileFragments: Map, signatureToIndexMapping: Map> ): ModuleArtifact { @@ -98,7 +99,7 @@ class IncrementalCache(private val library: KotlinLibrary, cachePath: String) { SrcFileArtifact(srcFile.path, rebuiltFileFragment?.fragment, binaryAstFile) } - return ModuleArtifact(moduleName, fileArtifacts, cacheDir, forceRebuildJs) + return ModuleArtifact(moduleName, fileArtifacts, cacheDir, forceRebuildJs, externalModuleName) } data class ModifiedFiles( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt index 21a1ca9b4ba..4a9470e38e9 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt @@ -43,7 +43,7 @@ class JsMultiModuleCache(private val moduleArtifacts: List) { } CachedModuleInfo( artifact = this@fetchModuleInfo, - jsIrHeader = JsIrModuleHeader(moduleSafeName, moduleSafeName, definitions, nameBindings, hasJsExports, null), + jsIrHeader = JsIrModuleHeader(moduleSafeName, moduleExternalName, definitions, nameBindings, hasJsExports, null), crossModuleReferencesHash = crossModuleReferencesHash ) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ModuleArtifact.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ModuleArtifact.kt index 407f0507754..2713e8e1e19 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ModuleArtifact.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ModuleArtifact.kt @@ -31,13 +31,15 @@ class ModuleArtifact( moduleName: String, val fileArtifacts: List, val artifactsDir: File? = null, - val forceRebuildJs: Boolean = false + val forceRebuildJs: Boolean = false, + externalModuleName: String? = null ) { val moduleSafeName = moduleName.safeModuleName + val moduleExternalName = externalModuleName ?: moduleSafeName fun loadJsIrModule(): JsIrModule { val deserializer = JsIrAstDeserializer() val fragments = fileArtifacts.sortedBy { it.srcFilePath }.mapNotNull { it.loadJsIrFragment(deserializer) } - return JsIrModule(moduleSafeName, moduleSafeName, fragments) + return JsIrModule(moduleSafeName, moduleExternalName, fragments) } } 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 5e8a95a2a67..75afe46b419 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 @@ -79,6 +79,9 @@ val KotlinLibrary.isBuiltIns: Boolean .propertyList(KLIB_PROPERTY_DEPENDS, escapeInQuotes = true) .isEmpty() +val KotlinLibrary.jsOutputName: String? + get() = manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME) + private val CompilerConfiguration.metadataVersion get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE @@ -869,8 +872,6 @@ private fun KlibMetadataIncrementalSerializer(configuration: CompilerConfigurati private fun Map.getUniqueNameForEachFragment(): Map { return this.entries.mapNotNull { (moduleFragment, klib) -> - klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let { - moduleFragment to it - } + klib.jsOutputName?.let { moduleFragment to it } }.toMap() } diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt index dd4b585082b..ecbc40271b2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt @@ -43,7 +43,7 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() { private const val BOX_FUNCTION_NAME = "box" private const val STDLIB_ALIAS = "stdlib" - private val STDLIB_MODULE_NAME = "kotlin".safeModuleName + private val STDLIB_MODULE_NAME = "kotlin-kotlin-stdlib-js-ir" private val STDLIB_KLIB = File(System.getProperty("kotlin.js.stdlib.klib.path") ?: error("Please set stdlib path")).canonicalPath private val KT_FILE_IGNORE_PATTERN = Regex("^.*\\..+\\.kt$") @@ -175,9 +175,8 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() { } private fun verifyJsExecutableProducerBuildModules(stepId: Int, gotRebuilt: Set, expectedRebuilt: List) { - val expected = expectedRebuilt.map { it.safeModuleName } val got = gotRebuilt.filter { it != STDLIB_MODULE_NAME } - JUnit4Assertions.assertSameElements(got, expected) { + JUnit4Assertions.assertSameElements(got, expectedRebuilt) { "Mismatched rebuilt modules at step $stepId" } } @@ -249,8 +248,9 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() { val icCaches = cacheUpdater.actualizeCaches() verifyCacheUpdateStats(projStep.id, cacheUpdater.getDirtyFileStats(), testInfo) + val mainModuleName = icCaches.last().moduleExternalName val jsExecutableProducer = JsExecutableProducer( - mainModuleName = testInfo.last().moduleName, + mainModuleName = mainModuleName, moduleKind = configuration[JSConfigurationKeys.MODULE_KIND]!!, sourceMapsInfo = SourceMapsInfo.from(configuration), caches = icCaches, @@ -260,7 +260,7 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() { val rebuiltModules = mutableSetOf() val jsOutput = jsExecutableProducer.buildExecutable(multiModule = true, outJsProgram = true) { rebuiltModules += it } verifyJsExecutableProducerBuildModules(projStep.id, rebuiltModules, projStep.dirtyJS) - verifyJsCode(projStep.id, testInfo.last().moduleName, jsOutput) + verifyJsCode(projStep.id, mainModuleName, jsOutput) } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 83728116665..528da3fe8cc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -194,14 +194,14 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { .forEach { val text = it.readText() // cache keeps the js code of compiled module, this substring from that js code - if (text.contains("kotlin_js_ir_ic_multiple_artifacts_lib ")) { + if (text.contains("root['kotlin-js-ir-ic-multiple-artifacts-lib']")) { if (lib) { error("lib should be only once in cache") } lib = true } // cache keeps the js code of compiled module, this substring from that js code - if (text.contains("kotlin_js_ir_ic_multiple_artifacts_lib_other ")) { + if (text.contains("root['kotlin-js-ir-ic-multiple-artifacts-lib-other']")) { if (libOther) { error("libOther should be only once in cache") }