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

Commit e19d917

Browse files
committed
パラメータの振り分けを追加
1 parent f3072db commit e19d917

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import kotlin.reflect.KFunction
88
import kotlin.reflect.KParameter
99
import kotlin.reflect.full.isSuperclassOf
1010

11-
internal class ParameterForMap<T : Any> private constructor(val param: KParameter, private val clazz: KClass<T>) {
11+
internal class ParameterForMap<T : Any> private constructor(
12+
val param: KParameter,
13+
private val clazz: KClass<T>,
14+
private val parameterNameConverter: (String) -> String
15+
) {
1216
private val javaClazz: Class<T> by lazy {
1317
clazz.java
1418
}
@@ -38,15 +42,18 @@ internal class ParameterForMap<T : Any> private constructor(val param: KParamete
3842
javaClazz.isEnum && value is String -> ParameterProcessor.ToEnum(javaClazz)
3943
// 要求されているパラメータがStringならtoStringする
4044
clazz == String::class -> ParameterProcessor.ToString
41-
else -> throw IllegalArgumentException("Can not convert $valueClazz to $clazz")
45+
// 入力がmapもしくはpairなら、KMapperを用いてマッピングを試みる
46+
value is Map<*, *> || value is Pair<*, *> ->
47+
ParameterProcessor.UseKMapper(KMapper(clazz, parameterNameConverter))
48+
else -> ParameterProcessor.UseBoundKMapper(BoundKMapper(clazz, valueClazz, parameterNameConverter))
4249
}
4350
convertCache.putIfAbsent(valueClazz, processor)
4451
return processor.process(value)
4552
}
4653

4754
companion object {
48-
fun newInstance(param: KParameter): ParameterForMap<*> {
49-
return ParameterForMap(param, param.type.classifier as KClass<*>)
55+
fun newInstance(param: KParameter, parameterNameConverter: (String) -> String): ParameterForMap<*> {
56+
return ParameterForMap(param, param.type.classifier as KClass<*>, parameterNameConverter)
5057
}
5158
}
5259
}

0 commit comments

Comments
 (0)