Skip to content

Commit 4ab6048

Browse files
committed
Kotlin: Improve KotlinSerializerCodec (mongodb#1152)
Only support classes annotated as serializable. JAVA-5035
1 parent 252e441 commit 4ab6048

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

bson-kotlinx/src/main/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodec.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ package org.bson.codecs.kotlinx
1818
import kotlin.reflect.KClass
1919
import kotlin.reflect.full.findAnnotation
2020
import kotlin.reflect.full.findAnnotations
21+
import kotlin.reflect.full.hasAnnotation
2122
import kotlin.reflect.full.primaryConstructor
2223
import kotlinx.serialization.ExperimentalSerializationApi
2324
import kotlinx.serialization.InternalSerializationApi
2425
import kotlinx.serialization.KSerializer
26+
import kotlinx.serialization.Serializable
2527
import kotlinx.serialization.SerializationException
2628
import kotlinx.serialization.modules.SerializersModule
2729
import kotlinx.serialization.serializer
@@ -85,7 +87,7 @@ private constructor(
8587
serializersModule: SerializersModule = defaultSerializersModule,
8688
bsonConfiguration: BsonConfiguration = BsonConfiguration()
8789
): Codec<T>? {
88-
return if (kClass.isData || kClass.isValue || kClass.isSealed) {
90+
return if (kClass.hasAnnotation<Serializable>()) {
8991
try {
9092
create(kClass, kClass.serializer(), serializersModule, bsonConfiguration)
9193
} catch (exception: SerializationException) {

bson-kotlinx/src/test/kotlin/org/bson/codecs/kotlinx/KotlinSerializerCodecProviderTest.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class KotlinSerializerCodecProviderTest {
3232
@Test
3333
fun shouldReturnNullForNonSerializableClass() {
3434
assertNull(KotlinSerializerCodecProvider().get(NotMarkedSerializable::class.java, Bson.DEFAULT_CODEC_REGISTRY))
35+
assertNull(KotlinSerializerCodecProvider().get(DoubleArray::class.java, Bson.DEFAULT_CODEC_REGISTRY))
36+
assertNull(KotlinSerializerCodecProvider().get(CharSequence::class.java, Bson.DEFAULT_CODEC_REGISTRY))
3537
}
3638

3739
@Test
@@ -50,12 +52,6 @@ class KotlinSerializerCodecProviderTest {
5052
assertNull(codec)
5153
}
5254

53-
@Test
54-
fun shouldReturnNullForSerializableButNotValueClassOrSealedOrDataClassTypes() {
55-
assertNull(KotlinSerializerCodecProvider().get(DoubleArray::class.java, Bson.DEFAULT_CODEC_REGISTRY))
56-
assertNull(KotlinSerializerCodecProvider().get(CharSequence::class.java, Bson.DEFAULT_CODEC_REGISTRY))
57-
}
58-
5955
@Test
6056
fun shouldReturnKotlinSerializerCodecUsingDefaultRegistry() {
6157
val codec = MongoClientSettings.getDefaultCodecRegistry().get(DataClassWithSimpleValues::class.java)

0 commit comments

Comments
 (0)