From 9a74a5fcdd81f17359d3745f4b02dc5dd5181dc8 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 24 Jan 2024 11:55:33 +0000 Subject: [PATCH] [Gradle, Wasm] Compatible wasm distribution task with configuration cache ^KT-64851 fixed --- .../kotlin/gradle/WasmConfigurationCacheIT.kt | 13 +++++++++++++ .../wasm-browser-simple-project/build.gradle.kts | 16 ++++++++++++++++ .../src/wasmJsMain/kotlin/A.kt | 8 ++++++++ .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 14 +++++--------- 4 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/src/wasmJsMain/kotlin/A.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt index 82be2be29d0..2f29c043246 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt @@ -51,4 +51,17 @@ class WasmConfigurationCacheIT : KGPBaseTest() { } } } + + @DisplayName("Browser case works correctly with configuration cache") + @GradleTest + @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_6) + fun testBrowser(gradleVersion: GradleVersion) { + project("wasm-browser-simple-project", gradleVersion) { + assertSimpleConfigurationCacheScenarioWorks( + "assemble", + buildOptions = defaultBuildOptions, + executedTaskNames = listOf(":compileKotlinWasmJs", ":wasmJsBrowserDistribution") + ) + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/build.gradle.kts new file mode 100644 index 00000000000..375117ad86b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + wasmJs { + binaries.executable() + browser { + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/src/wasmJsMain/kotlin/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/src/wasmJsMain/kotlin/A.kt new file mode 100644 index 00000000000..cb5d5fd08dd --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/wasm-browser-simple-project/src/wasmJsMain/kotlin/A.kt @@ -0,0 +1,8 @@ +/* + * 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. + */ + +fun main() { + println("Hello, world") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 8fced20f7ed..2a9e6390496 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -9,7 +9,6 @@ import org.gradle.api.Action import org.gradle.api.DomainObjectSet import org.gradle.api.Task import org.gradle.api.file.Directory -import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy @@ -30,12 +29,10 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool import org.jetbrains.kotlin.gradle.tasks.dependsOn -import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.archivesName import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat import org.jetbrains.kotlin.gradle.utils.relativeOrAbsolute import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly -import java.io.File import javax.inject.Inject abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : @@ -234,12 +231,11 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : if (binary.compilation.platformType == KotlinPlatformType.wasm) { copy.from( - binary.linkSyncTask.flatMap { linkSyncTask -> - linkSyncTask.destinationDirectory.map { destDir -> - binary.linkTask.map { linkTask -> - linkTask.compilerOptions.moduleName.map { - destDir.resolve("$it.wasm") - } + binary.linkSyncTask.zip(binary.linkTask) { linkSyncTask, linkTask -> + val moduleNameProvider = linkTask.compilerOptions.moduleName + linkSyncTask.destinationDirectory.zip(moduleNameProvider) { destDir, moduleName -> + moduleName.map { + destDir.resolve("$it.wasm") } } }