Skip to content

Commit 61daeeb

Browse files
committed
Tidy the code according to the feedback
1 parent c5f5565 commit 61daeeb

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

core/api/kotlinx-serialization-core.klib.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,7 @@ final inline fun (kotlinx.serialization.encoding/Encoder).kotlinx.serialization.
11731173
final inline fun (kotlinx.serialization.encoding/Encoder).kotlinx.serialization.encoding/encodeStructure(kotlinx.serialization.descriptors/SerialDescriptor, crossinline kotlin/Function1<kotlinx.serialization.encoding/CompositeEncoder, kotlin/Unit>) // kotlinx.serialization.encoding/encodeStructure|encodeStructure@kotlinx.serialization.encoding.Encoder(kotlinx.serialization.descriptors.SerialDescriptor;kotlin.Function1<kotlinx.serialization.encoding.CompositeEncoder,kotlin.Unit>){}[0]
11741174
final inline fun <#A: kotlin/Any, #B: reified #A> (kotlinx.serialization.modules/PolymorphicModuleBuilder<#A>).kotlinx.serialization.modules/subclass(kotlin.reflect/KClass<#B>) // kotlinx.serialization.modules/subclass|subclass@kotlinx.serialization.modules.PolymorphicModuleBuilder<0:0>(kotlin.reflect.KClass<0:1>){0§<kotlin.Any>;1§<0:0>}[0]
11751175
final inline fun <#A: kotlin/Any, #B: reified #A> (kotlinx.serialization.modules/PolymorphicModuleBuilder<#A>).kotlinx.serialization.modules/subclass(kotlinx.serialization/KSerializer<#B>) // kotlinx.serialization.modules/subclass|subclass@kotlinx.serialization.modules.PolymorphicModuleBuilder<0:0>(kotlinx.serialization.KSerializer<0:1>){0§<kotlin.Any>;1§<0:0>}[0]
1176-
final inline fun <#A: kotlin/Any, #B: reified #A> (kotlinx.serialization.modules/PolymorphicModuleBuilder<#A>).kotlinx.serialization.modules/subclassesOfSealed(kotlin.reflect/KClass<#B>) // kotlinx.serialization.modules/subclassesOfSealed|subclassesOfSealed@kotlinx.serialization.modules.PolymorphicModuleBuilder<0:0>(kotlin.reflect.KClass<0:1>){0§<kotlin.Any>;1§<0:0>}[0]
1176+
final inline fun <#A: kotlin/Any, #B: reified #A> (kotlinx.serialization.modules/PolymorphicModuleBuilder<#A>).kotlinx.serialization.modules/subclassesOfSealed() // kotlinx.serialization.modules/subclassesOfSealed|subclassesOfSealed@kotlinx.serialization.modules.PolymorphicModuleBuilder<0:0>(){0§<kotlin.Any>;1§<0:0>}[0]
11771177
final inline fun <#A: kotlin/Any> (kotlinx.serialization.modules/SerializersModuleBuilder).kotlinx.serialization.modules/polymorphic(kotlin.reflect/KClass<#A>, kotlinx.serialization/KSerializer<#A>? = ..., kotlin/Function1<kotlinx.serialization.modules/PolymorphicModuleBuilder<#A>, kotlin/Unit> = ...) // kotlinx.serialization.modules/polymorphic|polymorphic@kotlinx.serialization.modules.SerializersModuleBuilder(kotlin.reflect.KClass<0:0>;kotlinx.serialization.KSerializer<0:0>?;kotlin.Function1<kotlinx.serialization.modules.PolymorphicModuleBuilder<0:0>,kotlin.Unit>){0§<kotlin.Any>}[0]
11781178
final inline fun <#A: kotlin/Any?> (kotlinx.serialization.encoding/Decoder).kotlinx.serialization.encoding/decodeStructure(kotlinx.serialization.descriptors/SerialDescriptor, crossinline kotlin/Function1<kotlinx.serialization.encoding/CompositeDecoder, #A>): #A // kotlinx.serialization.encoding/decodeStructure|decodeStructure@kotlinx.serialization.encoding.Decoder(kotlinx.serialization.descriptors.SerialDescriptor;kotlin.Function1<kotlinx.serialization.encoding.CompositeDecoder,0:0>){0§<kotlin.Any?>}[0]
11791179
final inline fun <#A: kotlin/Any?> (kotlinx.serialization.encoding/Encoder).kotlinx.serialization.encoding/encodeCollection(kotlinx.serialization.descriptors/SerialDescriptor, kotlin.collections/Collection<#A>, crossinline kotlin/Function3<kotlinx.serialization.encoding/CompositeEncoder, kotlin/Int, #A, kotlin/Unit>) // kotlinx.serialization.encoding/encodeCollection|encodeCollection@kotlinx.serialization.encoding.Encoder(kotlinx.serialization.descriptors.SerialDescriptor;kotlin.collections.Collection<0:0>;kotlin.Function3<kotlinx.serialization.encoding.CompositeEncoder,kotlin.Int,0:0,kotlin.Unit>){0§<kotlin.Any?>}[0]

core/commonMain/src/kotlinx/serialization/modules/PolymorphicModuleBuilder.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ public class PolymorphicModuleBuilder<in Base : Any> @PublishedApi internal cons
2626

2727

2828
/**
29-
* Registers the child serializers for the sealed [subclass] [serializer] in the resulting module under
29+
* Registers the child serializers for the sealed type [T] in the resulting module under
3030
* the [base class][Base]. Please note that type `T` has to be sealed and have a standard serializer, if not a runtime error will
31-
* be thrown at registration time. This function is a convenience function for the version that
31+
* be thrown at registration time. If one of [T]'s subclasses is a sealed serializable class on
32+
* its own, its subclasses are registered recursively as well. If one of [T]'s subclasses is an
33+
* open polymorphic class an [IllegalArgumentException] is thrown.
34+
*
35+
* This function is a convenience function for the version that
3236
* receives a serializer.
3337
*
3438
*
@@ -37,7 +41,7 @@ public class PolymorphicModuleBuilder<in Base : Any> @PublishedApi internal cons
3741
* interface Base
3842
*
3943
* @Serializable
40-
* sealed interface Sub
44+
* sealed interface Sub: Base
4145
*
4246
* @Serializable
4347
* class Sub1: Sub
@@ -55,15 +59,18 @@ public class PolymorphicModuleBuilder<in Base : Any> @PublishedApi internal cons
5559

5660

5761
/**
58-
* Registers the subclasses of the given class as subclasses of the outer class. This currently
59-
* requires `serializer` to be sealed. If not a runtime error will be thrown at registration time.
62+
* Registers the child serializers for the sealed type [T] in the resulting module under
63+
* the [base class][Base]. Please note that type `T` has to be sealed and have a standard serializer, if not a runtime error will
64+
* be thrown at registration time. If one of [T]'s subclasses is a sealed serializable class on
65+
* its own, its subclasses are registered recursively as well. If one of [T]'s subclasses is an
66+
* open polymorphic class an [IllegalArgumentException] is thrown.
6067
*
6168
* Example:
6269
* ```kotlin
6370
* interface Base
6471
*
6572
* @Serializable
66-
* sealed interface Sub
73+
* sealed interface Sub: Base
6774
*
6875
* @Serializable
6976
* class Sub1: Sub
@@ -195,5 +202,5 @@ public inline fun <Base : Any, reified T : Base> PolymorphicModuleBuilder<Base>.
195202
* Registers the child serializers for the sealed class [T] in the resulting module under the [base class][Base].
196203
*/
197204
@ExperimentalSerializationApi
198-
public inline fun <Base : Any, reified T : Base> PolymorphicModuleBuilder<Base>.subclassesOfSealed(clazz: KClass<T>): Unit =
199-
subclassesOfSealed(clazz.serializer())
205+
public inline fun <Base : Any, reified T : Base> PolymorphicModuleBuilder<Base>.subclassesOfSealed(): Unit =
206+
subclassesOfSealed(serializer<T>())

formats/json-tests/commonTest/src/kotlinx/serialization/features/PolymorphicSealedChildTest.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,10 @@ class PolymorphicSealedChildTest {
7575
serializersModule = SerializersModule {
7676
polymorphic(FooBase::class) {
7777
subclassesOfSealed<FooOpen>()
78-
fail("This code should be unreachable as the previous operation fails")
79-
subclass(FooOpen.BazChild1::class)
80-
subclass(FooOpen.BazChild2::class)
8178
}
8279
}
8380
}
8481

85-
fail("Unreachable code that would represent the usage if valid (which is isn't per policy)")
86-
assertStringFormAndRestored(
87-
"""{"someMetadata":43,"payload":[{"type":"BazOC1","baz":"aaa"}]}""",
88-
FooHolder(43,listOf(FooOpen.BazChild1("aaa"))),
89-
FooHolder.serializer(),
90-
openJson
91-
)
9282
}
9383
assertContains(assertNotNull(e.message), "FooOpen", )
9484
assertContains(assertNotNull(e.message), "incomplete hierarchy", )

0 commit comments

Comments
 (0)