Skip to content

Commit f633ff4

Browse files
authored
Wasm Support (#190)
1 parent faf307f commit f633ff4

File tree

38 files changed

+507
-124
lines changed

38 files changed

+507
-124
lines changed

build.gradle.kts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@
44

55
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
66
import util.kotlinVersionParsed
7+
import util.libs
78

89
plugins {
910
alias(libs.plugins.serialization) apply false
1011
alias(libs.plugins.kotlinx.rpc) apply false
11-
alias(libs.plugins.atomicfu) apply false
1212
alias(libs.plugins.conventions.kover)
1313
alias(libs.plugins.conventions.gradle.doctor)
1414
alias(libs.plugins.binary.compatibility.validator)
15+
16+
if (libs.versions.atomicfu.get() >= "0.24.0") {
17+
alias(libs.plugins.atomicfu.new)
18+
} else {
19+
alias(libs.plugins.atomicfu.old)
20+
}
1521
}
1622

1723
// useful for dependencies introspection

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/VersionSpecificApi.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.platform.TargetPlatform
1616

1717
interface VersionSpecificApi {
1818
fun isJs(platform: TargetPlatform?): Boolean
19+
fun isWasm(platform: TargetPlatform?): Boolean
1920

2021
fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol?
2122

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCIrContext.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ internal class RPCIrContext(
131131
return pluginContext.platform.isNative()
132132
}
133133

134+
fun isWasmTarget(): Boolean {
135+
return versionSpecificApi.isWasm(pluginContext.platform)
136+
}
137+
134138
val functions = Functions()
135139

136140
inner class Functions {

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCStubGenerator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,10 +1209,10 @@ internal class RPCStubGenerator(
12091209
}
12101210
}
12111211

1212-
// Associated object annotation works on JS and Native platforms.
1212+
// Associated object annotation works on JS, WASM, and Native platforms.
12131213
// See https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/find-associated-object.html
12141214
private fun addAssociatedObjectAnnotationIfPossible() {
1215-
if (ctx.isJsTarget() || ctx.isNativeTarget()) {
1215+
if (ctx.isJsTarget() || ctx.isNativeTarget() || ctx.isWasmTarget()) {
12161216
addAssociatedObjectAnnotation()
12171217
}
12181218
}

compiler-plugin/compiler-plugin-backend/src/main/latest/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@ import org.jetbrains.kotlin.name.FqName
2020
import org.jetbrains.kotlin.name.Name
2121
import org.jetbrains.kotlin.platform.TargetPlatform
2222
import org.jetbrains.kotlin.platform.isJs
23+
import org.jetbrains.kotlin.platform.isWasm
2324

2425
object VersionSpecificApiImpl : VersionSpecificApi {
2526
override fun isJs(platform: TargetPlatform?): Boolean {
2627
return platform.isJs()
2728
}
2829

30+
override fun isWasm(platform: TargetPlatform?): Boolean {
31+
return platform.isWasm()
32+
}
33+
2934
override var IrFieldBuilder.isFinalVS: Boolean
3035
get() = isFinal
3136
set(value) {

compiler-plugin/compiler-plugin-backend/src/main/v_1_7/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ object VersionSpecificApiImpl : VersionSpecificApi {
2222
override fun isJs(platform: TargetPlatform?): Boolean {
2323
return platform.isJs()
2424
}
25+
26+
override fun isWasm(platform: TargetPlatform?): Boolean = false
27+
2528
override var IrFieldBuilder.isFinalVS: Boolean
2629
get() = undefinedAPI()
2730
set(_) {}

compiler-plugin/compiler-plugin-backend/src/main/v_1_7_2/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ object VersionSpecificApiImpl : VersionSpecificApi {
2525
override fun isJs(platform: TargetPlatform?): Boolean {
2626
return platform.isJs()
2727
}
28+
29+
override fun isWasm(platform: TargetPlatform?): Boolean = false
30+
2831
override var IrFieldBuilder.isFinalVS: Boolean
2932
get() = undefinedAPI()
3033
set(_) {}

compiler-plugin/compiler-plugin-backend/src/main/v_1_8/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ object VersionSpecificApiImpl : VersionSpecificApi {
2626
override fun isJs(platform: TargetPlatform?): Boolean {
2727
return platform.isJs()
2828
}
29+
30+
override fun isWasm(platform: TargetPlatform?): Boolean = false
31+
2932
override var IrFieldBuilder.isFinalVS: Boolean
3033
get() = undefinedAPI()
3134
set(_) {}

compiler-plugin/compiler-plugin-backend/src/main/v_1_9/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ object VersionSpecificApiImpl : VersionSpecificApi {
2828
return platform.isJs()
2929
}
3030

31+
override fun isWasm(platform: TargetPlatform?): Boolean = false
32+
3133
override var IrFieldBuilder.isFinalVS: Boolean
3234
get() = modality == Modality.FINAL
3335
set(value) {

core/build.gradle.kts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1+
/*
2+
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
import util.applyAtomicfuPlugin
6+
17
/*
28
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
39
*/
410

511
plugins {
612
alias(libs.plugins.conventions.kmp)
7-
alias(libs.plugins.atomicfu)
813
}
914

15+
applyAtomicfuPlugin()
16+
1017
kotlin {
1118
sourceSets {
1219
commonMain {
@@ -24,5 +31,11 @@ kotlin {
2431
implementation(libs.kotlin.js.wrappers)
2532
}
2633
}
34+
35+
wasmJsMain {
36+
dependencies {
37+
implementation(libs.kotlinx.browser)
38+
}
39+
}
2740
}
2841
}

0 commit comments

Comments
 (0)