@@ -6,7 +6,11 @@ import kotlin.reflect.KFunction
66import kotlin.reflect.KParameter
77import kotlin.reflect.full.isSuperclassOf
88
9- internal class PlainParameterForMap <T : Any > private constructor(val param : KParameter , private val clazz : KClass <T >) {
9+ internal class PlainParameterForMap <T : Any > private constructor(
10+ val param : KParameter ,
11+ private val clazz : KClass <T >,
12+ private val parameterNameConverter : (String ) -> String
13+ ) {
1014 private val javaClazz: Class <T > by lazy {
1115 clazz.java
1216 }
@@ -28,13 +32,14 @@ internal class PlainParameterForMap<T : Any> private constructor(val param: KPar
2832 javaClazz.isEnum && value is String -> EnumMapper .getEnum(javaClazz, value)
2933 // 要求されているパラメータがStringならtoStringする
3034 clazz == String ::class -> value.toString()
31- else -> throw IllegalArgumentException (" Can not convert $valueClazz to $clazz " )
35+ // それ以外の場合PlainKMapperを作り再帰的なマッピングを試みる
36+ else -> PlainKMapper (clazz, parameterNameConverter).map(value, PARAMETER_DUMMY )
3237 }
3338 }
3439
3540 companion object {
36- fun newInstance (param : KParameter ): PlainParameterForMap <* > {
37- return PlainParameterForMap (param, param.type.classifier as KClass <* >)
41+ fun newInstance (param : KParameter , parameterNameConverter : ( String ) -> String ): PlainParameterForMap <* > {
42+ return PlainParameterForMap (param, param.type.classifier as KClass <* >, parameterNameConverter )
3843 }
3944 }
4045}
0 commit comments