@@ -18,10 +18,10 @@ package org.bson.codecs.kotlin
18
18
import java.lang.reflect.ParameterizedType
19
19
import java.lang.reflect.Type
20
20
import kotlin.reflect.KClass
21
+ import kotlin.reflect.KClassifier
21
22
import kotlin.reflect.KFunction
22
23
import kotlin.reflect.KParameter
23
24
import kotlin.reflect.KProperty1
24
- import kotlin.reflect.KType
25
25
import kotlin.reflect.KTypeParameter
26
26
import kotlin.reflect.KTypeProjection
27
27
import kotlin.reflect.full.createType
@@ -142,7 +142,9 @@ internal data class DataClassCodec<T : Any>(
142
142
val primaryConstructor =
143
143
kClass.primaryConstructor ? : throw CodecConfigurationException (" No primary constructor for $kClass " )
144
144
val typeMap =
145
- types.mapIndexed { i, k -> primaryConstructor.typeParameters[i].createType() to k }.toMap()
145
+ types
146
+ .mapIndexed { i, k -> primaryConstructor.typeParameters[i].createType().classifier!! to k }
147
+ .toMap()
146
148
147
149
val propertyModels =
148
150
primaryConstructor.parameters.map { kParameter ->
@@ -193,18 +195,20 @@ internal data class DataClassCodec<T : Any>(
193
195
@Suppress(" UNCHECKED_CAST" )
194
196
private fun getCodec (
195
197
kParameter : KParameter ,
196
- typeMap : Map <KType , Type >,
198
+ typeMap : Map <KClassifier , Type >,
197
199
codecRegistry : CodecRegistry
198
200
): Codec <Any > {
199
201
return when (kParameter.type.classifier) {
200
202
is KClass <* > -> {
201
203
codecRegistry.getCodec(
202
204
kParameter,
203
205
(kParameter.type.classifier as KClass <Any >).javaObjectType,
204
- kParameter.type.arguments.mapNotNull { typeMap[it.type] ? : computeJavaType(it) }.toList())
206
+ kParameter.type.arguments
207
+ .mapNotNull { typeMap[it.type?.classifier] ? : computeJavaType(it) }
208
+ .toList())
205
209
}
206
210
is KTypeParameter -> {
207
- when (val pType = typeMap[kParameter.type] ? : kParameter.type.javaType) {
211
+ when (val pType = typeMap[kParameter.type.classifier ] ? : kParameter.type.javaType) {
208
212
is Class <* > ->
209
213
codecRegistry.getCodec(kParameter, (pType as Class <Any >).kotlin.javaObjectType, emptyList())
210
214
is ParameterizedType ->
0 commit comments