Skip to content

Commit 814fd15

Browse files
committed
Updated bson-kotlin in prep for bson-kotlinx
Expanded the test cases Simplified the DataClassCodecProvider JAVA-4872 JAVA-4873
1 parent dc79ce4 commit 814fd15

File tree

5 files changed

+328
-146
lines changed

5 files changed

+328
-146
lines changed

bson-kotlin/src/main/kotlin/org/bson/codecs/kotlin/DataClassCodec.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,25 @@ internal data class DataClassCodec<T : Any>(
129129
internal val logger = Loggers.getLogger("DataClassCodec")
130130
private const val idFieldName = "_id"
131131

132-
fun <R : Any> create(kClass: KClass<R>, codecRegistry: CodecRegistry): Codec<R>? {
133-
return if (!kClass.isData) null
134-
else if (kClass.typeParameters.isEmpty()) createDataClassCodec(kClass, codecRegistry)
135-
else RawDataClassCodec(kClass)
132+
internal fun <R : Any> create(
133+
kClass: KClass<R>,
134+
codecRegistry: CodecRegistry,
135+
types: List<Type> = emptyList()
136+
): Codec<R>? {
137+
return if (!kClass.isData) {
138+
null
139+
} else if (kClass.typeParameters.isNotEmpty()) {
140+
RawDataClassCodec(kClass)
141+
} else {
142+
createDataClassCodec(kClass, codecRegistry, types)
143+
}
136144
}
137145

138-
internal fun <R : Any> createDataClassCodec(
146+
private fun <R : Any> createDataClassCodec(
139147
kClass: KClass<R>,
140148
codecRegistry: CodecRegistry,
141149
types: List<Type> = emptyList()
142-
): DataClassCodec<R> {
150+
): Codec<R> {
143151
validateAnnotations(kClass)
144152
val primaryConstructor =
145153
kClass.primaryConstructor ?: throw CodecConfigurationException("No primary constructor for $kClass")

bson-kotlin/src/main/kotlin/org/bson/codecs/kotlin/DataClassCodecProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.bson.codecs.Codec
1919
import org.bson.codecs.configuration.CodecProvider
2020
import org.bson.codecs.configuration.CodecRegistry
2121

22+
/** A Kotlin reflection based Codec Provider for data classes */
2223
public class DataClassCodecProvider : CodecProvider {
2324
override fun <T : Any> get(clazz: Class<T>, registry: CodecRegistry): Codec<T>? =
2425
DataClassCodec.create(clazz.kotlin, registry)

bson-kotlin/src/test/kotlin/org/bson/codecs/kotlin/DataClassCodecProviderTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ import org.bson.BsonDocumentWriter
2626
import org.bson.codecs.DecoderContext
2727
import org.bson.codecs.EncoderContext
2828
import org.bson.codecs.configuration.CodecConfigurationException
29-
import org.bson.codecs.kotlin.samples.DataClass
3029
import org.bson.codecs.kotlin.samples.DataClassEmbedded
3130
import org.bson.codecs.kotlin.samples.DataClassParameterized
3231
import org.bson.codecs.kotlin.samples.DataClassWithParameterizedDataClass
32+
import org.bson.codecs.kotlin.samples.DataClassWithSimpleValues
3333
import org.bson.conversions.Bson
3434
import org.junit.jupiter.api.Test
3535
import org.junit.jupiter.api.assertThrows
@@ -44,11 +44,11 @@ class DataClassCodecProviderTest {
4444
@Test
4545
fun shouldReturnDataClassCodecForDataClass() {
4646
val provider = DataClassCodecProvider()
47-
val codec = provider.get(DataClass::class.java, Bson.DEFAULT_CODEC_REGISTRY)
47+
val codec = provider.get(DataClassWithSimpleValues::class.java, Bson.DEFAULT_CODEC_REGISTRY)
4848

4949
assertNotNull(codec)
5050
assertTrue { codec is DataClassCodec }
51-
assertEquals(DataClass::class.java, codec.encoderClass)
51+
assertEquals(DataClassWithSimpleValues::class.java, codec.encoderClass)
5252
}
5353

5454
@Test
@@ -78,10 +78,10 @@ class DataClassCodecProviderTest {
7878

7979
@Test
8080
fun shouldReturnDataClassCodecUsingDefaultRegistry() {
81-
val codec = MongoClientSettings.getDefaultCodecRegistry().get(DataClass::class.java)
81+
val codec = MongoClientSettings.getDefaultCodecRegistry().get(DataClassWithSimpleValues::class.java)
8282

8383
assertNotNull(codec)
8484
assertTrue { codec is DataClassCodec }
85-
assertEquals(DataClass::class.java, codec.encoderClass)
85+
assertEquals(DataClassWithSimpleValues::class.java, codec.encoderClass)
8686
}
8787
}

0 commit comments

Comments
 (0)