From b240b8452a49a945723e000e3c3b4b2e0c9a660c Mon Sep 17 00:00:00 2001 From: Oleg Yukhnevich Date: Sun, 5 Mar 2023 21:48:33 +0300 Subject: [PATCH] support WASM in KotlinTargetHierarchyBuilder --- .../plugin/KotlinTargetHierarchyBuilder.kt | 3 +- .../buildKotlinTargetHierarchy.kt | 6 +- .../unitTests/KotlinTargetHierarchyDslTest.kt | 64 +++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt index df8ccc6e36b..cce95288699 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt @@ -28,9 +28,10 @@ interface KotlinTargetHierarchyBuilder { fun withMingw() fun withLinux() fun withAndroidNative() - fun withJs() /* Actual targets */ + fun withJs() + fun withWasm() fun withJvm() fun withAndroid() fun withAndroidNativeX64() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt index 4049712533c..97efbdb1fb3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.konan.target.DEPRECATED_TARGET_MESSAGE import org.jetbrains.kotlin.konan.target.Family @@ -117,7 +119,9 @@ private class KotlinTargetHierarchyBuilderImpl( override fun withAndroidNative() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID } - override fun withJs() = addTargets { it is KotlinJsTargetDsl } + /** Don't check for instance of [KotlinJsTargetDsl] or [KotlinWasmTargetDsl] because they are implemented by single target [KotlinJsIrTarget] */ + override fun withJs() = addTargets { it.platformType == KotlinPlatformType.js } + override fun withWasm() = addTargets { it.platformType == KotlinPlatformType.wasm } override fun withJvm() = addTargets { it is KotlinJvmTarget || diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt index 44d4c543acb..b62b1468c17 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.buildKotlinTargetHierarchy import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.naturalKotlinTargetHierarchy +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.util.* import kotlin.test.* @@ -319,6 +320,69 @@ class KotlinTargetHierarchyDslTest { ) } + @Test + fun `test - hierarchy js and wasm`() { + kotlin.targetHierarchy.custom { + common { + group("web") { + withJs() + withWasm() + } + } + } + + @OptIn(ExperimentalWasmDsl::class) + kotlin.wasm() + kotlin.js() + + assertEquals( + stringSetOf("webMain", "jsMain", "wasmMain"), + kotlin.dependingSourceSetNames("commonMain") + ) + + assertEquals( + stringSetOf("jsMain", "wasmMain"), + kotlin.dependingSourceSetNames("webMain") + ) + } + + @Test + fun `test - hierarchy js and wasm split`() { + kotlin.targetHierarchy.custom { + common { + group("jsAndJvm") { + withJs() + withJvm() + } + group("wasmAndLinux") { + withWasm() + withLinuxX64() + } + } + } + + @OptIn(ExperimentalWasmDsl::class) + kotlin.wasm() + kotlin.js() + kotlin.jvm() + kotlin.linuxX64() + + assertEquals( + stringSetOf("jsAndJvmMain", "wasmAndLinuxMain", "jvmMain", "linuxX64Main", "jsMain", "wasmMain"), + kotlin.dependingSourceSetNames("commonMain") + ) + + assertEquals( + stringSetOf("jsMain", "jvmMain"), + kotlin.dependingSourceSetNames("jsAndJvmMain") + ) + + assertEquals( + stringSetOf("wasmMain", "linuxX64Main"), + kotlin.dependingSourceSetNames("wasmAndLinuxMain") + ) + } + @Test fun `test - hierarchy set - extend - with new root`() { val descriptor = KotlinTargetHierarchyDescriptor {