Skip to content

Commit 6928c19

Browse files
committed
[Wasm] Use custom serializer for DevServer
1 parent 8b37669 commit 6928c19

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ class KotlinWasmGradlePluginIT : KGPBaseTest() {
588588
commonWebpackConfig {
589589
it.outputFileName = "check.js"
590590
it.devServer = (it.devServer ?: KotlinWebpackConfig.DevServer()).apply {
591+
@Suppress("DEPRECATION")
591592
static = (static ?: mutableListOf()).apply {
592593
add("bar")
593594
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
package org.jetbrains.kotlin.gradle.targets.js.webpack
99

1010
import com.google.gson.*
11-
import com.google.gson.annotations.JsonAdapter
1211
import com.google.gson.annotations.SerializedName
1312
import org.gradle.api.provider.Provider
1413
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
@@ -112,24 +111,44 @@ data class KotlinWebpackConfig(
112111
var open: Any = true,
113112
var port: Int? = null,
114113
var proxy: MutableList<Proxy>? = null,
115-
@Transient
116114
@Deprecated("Use 'static' fun instead")
117115
var static: MutableList<String>? = null,
118116
var contentBase: MutableList<String>? = null,
119117
var client: Client? = null,
120118
) : Serializable {
121119

120+
internal val mutableStatics: MutableList<Static> = mutableListOf()
121+
122122
fun static(directory: String, watch: Boolean = false) {
123-
mutableStatic.add(Static(directory, watch))
123+
mutableStatics.add(Static(directory, watch))
124124
}
125125

126126
val statics: List<Static>
127-
get() = mutableStatic.toList().filterIsInstance<Static>()
127+
get() = mutableStatics.toList()
128128

129129
@Suppress("DEPRECATION")
130-
@SerializedName("static")
131-
private val mutableStatic: MutableList<Any> = mutableListOf<Any>().also {
132-
it.addAll(static.orEmpty())
130+
@get:SerializedName("static")
131+
internal val actualStatic: List<Any>?
132+
get() {
133+
return buildList {
134+
addAll(static.orEmpty())
135+
addAll(mutableStatics)
136+
}.takeIf { it.isNotEmpty() }
137+
}
138+
139+
internal object DevServerAdapter : JsonSerializer<DevServer> {
140+
override fun serialize(
141+
src: DevServer,
142+
typeOfSrc: Type,
143+
ctx: JsonSerializationContext,
144+
): JsonElement {
145+
val obj = GsonBuilder().create()
146+
.toJsonTree(src, typeOfSrc).asJsonObject
147+
obj.remove("static")
148+
obj.remove("mutableStatics")
149+
obj.add("static", ctx.serialize(src.actualStatic))
150+
return obj
151+
}
133152
}
134153

135154
data class Client(
@@ -149,7 +168,6 @@ data class KotlinWebpackConfig(
149168
val changeOrigin: Boolean? = null,
150169
) : Serializable
151170

152-
@JsonAdapter(Static.StaticSerializer::class)
153171
data class Static(
154172
val directory: String,
155173
val watch: Boolean = false,
@@ -392,7 +410,12 @@ data class KotlinWebpackConfig(
392410
}
393411

394412
private fun json(obj: Any) = StringWriter().also {
395-
GsonBuilder().setPrettyPrinting().create().toJson(obj, it)
413+
GsonBuilder()
414+
.registerTypeAdapter(DevServer::class.java, DevServer.DevServerAdapter)
415+
.registerTypeAdapter(DevServer.Static::class.java, DevServer.Static.StaticSerializer)
416+
.setPrettyPrinting()
417+
.create()
418+
.toJson(obj, it)
396419
}.toString()
397420
}
398421

0 commit comments

Comments
 (0)