diff --git a/bson-kotlinx/src/main/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodec.kt b/bson-kotlinx/src/main/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodec.kt index bf1a8bc9722..30d40fe6f31 100644 --- a/bson-kotlinx/src/main/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodec.kt +++ b/bson-kotlinx/src/main/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodec.kt @@ -18,10 +18,12 @@ package org.bson.codecs.kotlinx import kotlin.reflect.KClass import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotations +import kotlin.reflect.full.hasAnnotation import kotlin.reflect.full.primaryConstructor import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable import kotlinx.serialization.SerializationException import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.serializer @@ -85,14 +87,14 @@ private constructor( serializersModule: SerializersModule = defaultSerializersModule, bsonConfiguration: BsonConfiguration = BsonConfiguration() ): Codec? { - return if (!(kClass.isData || kClass.isValue || kClass.isSealed)) { - null - } else { + return if (kClass.hasAnnotation()) { try { create(kClass, kClass.serializer(), serializersModule, bsonConfiguration) } catch (exception: SerializationException) { null } + } else { + null } } diff --git a/bson-kotlinx/src/test/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodecProviderTest.kt b/bson-kotlinx/src/test/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodecProviderTest.kt index d7a17760b3e..0870e2033e9 100644 --- a/bson-kotlinx/src/test/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodecProviderTest.kt +++ b/bson-kotlinx/src/test/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodecProviderTest.kt @@ -32,6 +32,8 @@ class KotlinSerializerCodecProviderTest { @Test fun shouldReturnNullForNonSerializableClass() { assertNull(KotlinSerializerCodecProvider().get(NotMarkedSerializable::class.java, Bson.DEFAULT_CODEC_REGISTRY)) + assertNull(KotlinSerializerCodecProvider().get(DoubleArray::class.java, Bson.DEFAULT_CODEC_REGISTRY)) + assertNull(KotlinSerializerCodecProvider().get(CharSequence::class.java, Bson.DEFAULT_CODEC_REGISTRY)) } @Test @@ -50,12 +52,6 @@ class KotlinSerializerCodecProviderTest { assertNull(codec) } - @Test - fun shouldReturnNullForSerializableButNotValueClassOrSealedOrDataClassTypes() { - assertNull(KotlinSerializerCodecProvider().get(DoubleArray::class.java, Bson.DEFAULT_CODEC_REGISTRY)) - assertNull(KotlinSerializerCodecProvider().get(CharSequence::class.java, Bson.DEFAULT_CODEC_REGISTRY)) - } - @Test fun shouldReturnKotlinSerializerCodecUsingDefaultRegistry() { val codec = MongoClientSettings.getDefaultCodecRegistry().get(DataClassWithSimpleValues::class.java)