File tree Expand file tree Collapse file tree 2 files changed +19
-3
lines changed
commonMain/src/kotlinx/serialization/modules
commonTest/src/kotlinx/serialization/modules Expand file tree Collapse file tree 2 files changed +19
-3
lines changed Original file line number Diff line number Diff line change @@ -153,9 +153,9 @@ public class SerializersModuleBuilder @PublishedApi internal constructor() : Ser
153
153
defaultSerializerProvider : (value: Base ) -> SerializationStrategy <Base >? ,
154
154
allowOverwrite : Boolean
155
155
) {
156
- val previous = polyBase2DefaultDeserializerProvider [baseClass]
156
+ val previous = polyBase2DefaultSerializerProvider [baseClass]
157
157
if (previous != null && previous != defaultSerializerProvider && ! allowOverwrite) {
158
- throw IllegalArgumentException (" Default serializers provider for class $baseClass is already registered: $previous " )
158
+ throw IllegalArgumentException (" Default serializers provider for $baseClass is already registered: $previous " )
159
159
}
160
160
polyBase2DefaultSerializerProvider[baseClass] = defaultSerializerProvider
161
161
}
@@ -168,7 +168,7 @@ public class SerializersModuleBuilder @PublishedApi internal constructor() : Ser
168
168
) {
169
169
val previous = polyBase2DefaultDeserializerProvider[baseClass]
170
170
if (previous != null && previous != defaultDeserializerProvider && ! allowOverwrite) {
171
- throw IllegalArgumentException (" Default deserializers provider for class $baseClass is already registered: $previous " )
171
+ throw IllegalArgumentException (" Default deserializers provider for $baseClass is already registered: $previous " )
172
172
}
173
173
polyBase2DefaultDeserializerProvider[baseClass] = defaultDeserializerProvider
174
174
}
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ package kotlinx.serialization.modules
9
9
import kotlinx.serialization.*
10
10
import kotlinx.serialization.builtins.*
11
11
import kotlinx.serialization.descriptors.*
12
+ import kotlinx.serialization.encoding.*
12
13
import kotlin.reflect.*
13
14
import kotlin.test.*
14
15
@@ -305,6 +306,21 @@ class ModuleBuildersTest {
305
306
assertEquals<Any ?>(Unit .serializer(), m2.getPolymorphic(Any ::class , serializedClassName = " foo" ))
306
307
}
307
308
309
+ @Test
310
+ fun testBothPolymorphicDefaults () {
311
+ val anySerializer = object : KSerializer <Any > {
312
+ override val descriptor: SerialDescriptor get() = error(" descriptor" )
313
+ override fun serialize (encoder : Encoder , value : Any ): Unit = error(" serialize" )
314
+ override fun deserialize (decoder : Decoder ): Any = error(" deserialize" )
315
+ }
316
+ val module = SerializersModule {
317
+ polymorphicDefaultDeserializer(Any ::class ) { _ -> anySerializer }
318
+ polymorphicDefaultSerializer(Any ::class ) { _ -> anySerializer }
319
+ }
320
+ assertEquals(anySerializer, module.getPolymorphic(Any ::class , 42 ))
321
+ assertEquals(anySerializer, module.getPolymorphic(Any ::class , serializedClassName = " 42" ))
322
+ }
323
+
308
324
@Test
309
325
fun testPolymorphicForStandardSubtypesOfAny () {
310
326
val serializer = object : KSerializer <Int > by Int .serializer() {}
You can’t perform that action at this time.
0 commit comments