diff options
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt')
-rw-r--r-- | core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt b/core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt index a85b4659..26d3b5e2 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/AbstractPolymorphicSerializer.kt @@ -58,8 +58,8 @@ public abstract class AbstractPolymorphicSerializer<T : Any> internal constructo } else -> throw SerializationException( "Invalid index in polymorphic deserialization of " + - (klassName ?: "unknown class") + - "\n Expected 0, 1 or DECODE_DONE(-1), but found $index" + (klassName ?: "unknown class") + + "\n Expected 0, 1 or DECODE_DONE(-1), but found $index" ) } } @@ -81,7 +81,7 @@ public abstract class AbstractPolymorphicSerializer<T : Any> internal constructo public open fun findPolymorphicSerializerOrNull( decoder: CompositeDecoder, klassName: String? - ): DeserializationStrategy<out T>? = decoder.serializersModule.getPolymorphic(baseClass, klassName) + ): DeserializationStrategy<T>? = decoder.serializersModule.getPolymorphic(baseClass, klassName) /** @@ -98,13 +98,14 @@ public abstract class AbstractPolymorphicSerializer<T : Any> internal constructo @JvmName("throwSubtypeNotRegistered") internal fun throwSubtypeNotRegistered(subClassName: String?, baseClass: KClass<*>): Nothing { - val scope = "in the scope of '${baseClass.simpleName}'" + val scope = "in the polymorphic scope of '${baseClass.simpleName}'" throw SerializationException( if (subClassName == null) - "Class discriminator was missing and no default polymorphic serializers were registered $scope" + "Class discriminator was missing and no default serializers were registered $scope." else - "Class '$subClassName' is not registered for polymorphic serialization $scope.\n" + - "Mark the base class as 'sealed' or register the serializer explicitly." + "Serializer for subclass '$subClassName' is not found $scope.\n" + + "Check if class with serial name '$subClassName' exists and serializer is registered in a corresponding SerializersModule.\n" + + "To be registered automatically, class '$subClassName' has to be '@Serializable', and the base class '${baseClass.simpleName}' has to be sealed and '@Serializable'." ) } |