Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit df695c9

Browse files
committed
振り分けを追加
1 parent da277f8 commit df695c9

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import kotlin.reflect.KFunction
66
import kotlin.reflect.KParameter
77
import 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

Comments
 (0)