diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt index af5fd3186b5cd..12fd4195ada77 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt @@ -128,6 +128,8 @@ class CrossModuleDependenciesResolver( } } + headerToBuilder.forEach { it.value.buildExportNames() } + return headers.associateWith { headerToBuilder[it]!!.buildCrossModuleRefs() } } } @@ -145,13 +147,12 @@ private class JsIrModuleCrossModuleReferenceBuilder( private lateinit var exportNames: Map // tag -> index - private fun buildExportNames() { + fun buildExportNames() { var index = 0 exportNames = exports.sorted().associateWith { index++.toJsIdentifier() } } fun buildCrossModuleRefs(): CrossModuleReferences { - buildExportNames() val isImportOptional = moduleKind == ModuleKind.ES val importedModules = mutableMapOf() 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 2f3a9511b0a24..60c9a2481d41c 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 @@ -620,6 +620,16 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { } } } + + @DisplayName("Cross modules work correctly with compose dependency ('KT60852')") + @GradleTest + fun crossModulesWorkCorrectlyWithComposeDependencyKT60852(gradleVersion: GradleVersion) { + project("kotlin-js-compose-dependency", gradleVersion) { + build("compileDevelopmentExecutableKotlinJs") { + assertTasksExecuted(":compileDevelopmentExecutableKotlinJs") + } + } + } } @JsGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/build.gradle.kts new file mode 100644 index 0000000000000..03dc93134dc64 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + js { + binaries.executable() + nodejs { + } + } + sourceSets { + val commonMain by getting { + dependencies { + implementation("org.jetbrains.compose.runtime:runtime:1.4.3") // commenting this out and uncommenting in jsMain fixes the issue + } + } + val jsMain by getting { + dependencies { + implementation("org.jetbrains.compose.html:html-core:1.4.3") + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/gradle.properties new file mode 100644 index 0000000000000..a7d8617fa6f6a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/gradle.properties @@ -0,0 +1 @@ +kotlin.js.compiler=ir \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/src/jsMain/kotlin/Base.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/src/jsMain/kotlin/Base.kt new file mode 100644 index 0000000000000..82dbb4db6cf78 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-compose-dependency/src/jsMain/kotlin/Base.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi +import org.jetbrains.compose.web.internal.runtime.DomApplier + +@OptIn(ComposeWebInternalApi::class) +fun main() { + DomApplier::class.js +} \ No newline at end of file