Skip to content

Commit 206a119

Browse files
committed
Kotlin: Limit the KotlinSerializerCodec to Data, Value or Sealed Classes
JAVA-5035
1 parent a7ac68f commit 206a119

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,14 @@ private constructor(
8585
serializersModule: SerializersModule = defaultSerializersModule,
8686
bsonConfiguration: BsonConfiguration = BsonConfiguration()
8787
): Codec<T>? {
88-
return try {
89-
create(kClass, kClass.serializer(), serializersModule, bsonConfiguration)
90-
} catch (exception: SerializationException) {
88+
return if (!(kClass.isData || kClass.isValue || kClass.isSealed)) {
9189
null
90+
} else {
91+
try {
92+
create(kClass, kClass.serializer(), serializersModule, bsonConfiguration)
93+
} catch (exception: SerializationException) {
94+
null
95+
}
9296
}
9397
}
9498

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ class KotlinSerializerCodecProviderTest {
5050
assertNull(codec)
5151
}
5252

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+
5359
@Test
5460
fun shouldReturnKotlinSerializerCodecUsingDefaultRegistry() {
5561
val codec = MongoClientSettings.getDefaultCodecRegistry().get(DataClassWithSimpleValues::class.java)

0 commit comments

Comments
 (0)