Skip to content

Commit 6b6c3dd

Browse files
authored
Kotlin: Improve KotlinSerializerCodec (#1152)
Only support classes annotated as serializable. JAVA-5035
1 parent 63af01b commit 6b6c3dd

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

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

Lines changed: 5 additions & 3 deletions
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,14 +87,14 @@ private constructor(
8587
serializersModule: SerializersModule = defaultSerializersModule,
8688
bsonConfiguration: BsonConfiguration = BsonConfiguration()
8789
): Codec<T>? {
88-
return if (!(kClass.isData || kClass.isValue || kClass.isSealed)) {
89-
null
90-
} else {
90+
return if (kClass.hasAnnotation<Serializable>()) {
9191
try {
9292
create(kClass, kClass.serializer(), serializersModule, bsonConfiguration)
9393
} catch (exception: SerializationException) {
9494
null
9595
}
96+
} else {
97+
null
9698
}
9799
}
98100

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)