[Wasm] Use custom serializer for DevServer
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt
index 956b07a..3d46230 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt
@@ -587,6 +587,7 @@
                         commonWebpackConfig {
                             it.outputFileName = "check.js"
                             it.devServer = (it.devServer ?: KotlinWebpackConfig.DevServer()).apply {
+                                @Suppress("DEPRECATION")
                                 static = (static ?: mutableListOf()).apply {
                                     add("bar")
                                 }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
index 1e261fd..6ad0d11 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
@@ -8,7 +8,6 @@
 package org.jetbrains.kotlin.gradle.targets.js.webpack
 
 import com.google.gson.*
-import com.google.gson.annotations.JsonAdapter
 import com.google.gson.annotations.SerializedName
 import org.gradle.api.provider.Provider
 import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
@@ -112,24 +111,44 @@
         var open: Any = true,
         var port: Int? = null,
         var proxy: MutableList<Proxy>? = null,
-        @Transient
         @Deprecated("Use 'static' fun instead")
         var static: MutableList<String>? = null,
         var contentBase: MutableList<String>? = null,
         var client: Client? = null,
     ) : Serializable {
 
+        internal val mutableStatics: MutableList<Static> = mutableListOf()
+
         fun static(directory: String, watch: Boolean = false) {
-            mutableStatic.add(Static(directory, watch))
+            mutableStatics.add(Static(directory, watch))
         }
 
         val statics: List<Static>
-            get() = mutableStatic.toList().filterIsInstance<Static>()
+            get() = mutableStatics.toList()
 
         @Suppress("DEPRECATION")
-        @SerializedName("static")
-        private val mutableStatic: MutableList<Any> = mutableListOf<Any>().also {
-            it.addAll(static.orEmpty())
+        @get:SerializedName("static")
+        internal val actualStatic: List<Any>?
+            get() {
+                return buildList {
+                    addAll(static.orEmpty())
+                    addAll(mutableStatics)
+                }.takeIf { it.isNotEmpty() }
+            }
+
+        internal object DevServerAdapter : JsonSerializer<DevServer> {
+            override fun serialize(
+                src: DevServer,
+                typeOfSrc: Type,
+                ctx: JsonSerializationContext,
+            ): JsonElement {
+                val obj = GsonBuilder().create()
+                    .toJsonTree(src, typeOfSrc).asJsonObject
+                obj.remove("static")
+                obj.remove("mutableStatics")
+                obj.add("static", ctx.serialize(src.actualStatic))
+                return obj
+            }
         }
 
         data class Client(
@@ -149,7 +168,6 @@
             val changeOrigin: Boolean? = null,
         ) : Serializable
 
-        @JsonAdapter(Static.StaticSerializer::class)
         data class Static(
             val directory: String,
             val watch: Boolean = false,
@@ -392,7 +410,12 @@
     }
 
     private fun json(obj: Any) = StringWriter().also {
-        GsonBuilder().setPrettyPrinting().create().toJson(obj, it)
+        GsonBuilder()
+            .registerTypeAdapter(DevServer::class.java, DevServer.DevServerAdapter)
+            .registerTypeAdapter(DevServer.Static::class.java, DevServer.Static.StaticSerializer)
+            .setPrettyPrinting()
+            .create()
+            .toJson(obj, it)
     }.toString()
 }