@@ -2,15 +2,12 @@ package com.mapk.kmapper
22
33import com.mapk.annotations.KGetterAlias
44import com.mapk.annotations.KGetterIgnore
5- import com.mapk.core.ArgumentBucket
5+ import com.mapk.core.ArgumentAdaptor
66import com.mapk.core.KFunctionForCall
7- import com.mapk.core.getAliasOrName
8- import com.mapk.core.isUseDefaultArgument
97import com.mapk.core.toKConstructor
108import java.lang.reflect.Method
119import kotlin.reflect.KClass
1210import kotlin.reflect.KFunction
13- import kotlin.reflect.KParameter
1411import kotlin.reflect.KVisibility
1512import kotlin.reflect.full.memberProperties
1613import kotlin.reflect.jvm.javaGetter
@@ -31,7 +28,7 @@ class PlainKMapper<T : Any> private constructor(
3128 it.name to PlainParameterForMap (it, parameterNameConverter)
3229 }
3330
34- private fun bindArguments (argumentBucket : ArgumentBucket , src : Any ) {
31+ private fun bindArguments (argumentAdaptor : ArgumentAdaptor , src : Any ) {
3532 src::class .memberProperties.forEach outer@{ property ->
3633 // propertyが公開されていない場合は処理を行わない
3734 if (property.visibility != KVisibility .PUBLIC ) return @outer
@@ -45,66 +42,69 @@ class PlainKMapper<T : Any> private constructor(
4542 if (it is KGetterIgnore ) return @outer // ignoreされている場合は処理を行わない
4643 if (it is KGetterAlias ) alias = it.value
4744 }
45+ alias = alias ? : property.name
4846
49- parameterMap[alias ? : property.name ]?.let {
47+ parameterMap[alias!! ]?.let {
5048 // javaGetterを呼び出す方が高速
5149 javaGetter.isAccessible = true
52- argumentBucket .putIfAbsent(it.param , javaGetter.invoke(src)?.let { value -> it.mapObject(value) })
50+ argumentAdaptor .putIfAbsent(alias !! , javaGetter.invoke(src)?.let { value -> it.mapObject(value) })
5351 // 終了判定
54- if (argumentBucket.isInitialized ) return
52+ if (argumentAdaptor.isFullInitialized() ) return
5553 }
5654 }
5755 }
5856
59- private fun bindArguments (argumentBucket : ArgumentBucket , src : Map <* , * >) {
57+ private fun bindArguments (argumentAdaptor : ArgumentAdaptor , src : Map <* , * >) {
6058 src.forEach { (key, value) ->
6159 parameterMap[key]?.let { param ->
6260 // 取得した内容がnullでなければ適切にmapする
63- argumentBucket .putIfAbsent(param.param , value?.let { param.mapObject(value) })
61+ argumentAdaptor .putIfAbsent(key as String , value?.let { param.mapObject(value) })
6462 // 終了判定
65- if (argumentBucket.isInitialized ) return
63+ if (argumentAdaptor.isFullInitialized() ) return
6664 }
6765 }
6866 }
6967
70- private fun bindArguments (argumentBucket : ArgumentBucket , srcPair : Pair <* , * >) {
71- parameterMap[srcPair.first.toString()]?.let {
72- argumentBucket.putIfAbsent(it.param, srcPair.second?.let { value -> it.mapObject(value) })
68+ private fun bindArguments (argumentBucket : ArgumentAdaptor , srcPair : Pair <* , * >) {
69+ val key = srcPair.first.toString()
70+
71+ parameterMap[key]?.let {
72+ argumentBucket.putIfAbsent(key, srcPair.second?.let { value -> it.mapObject(value) })
7373 }
7474 }
7575
7676 fun map (srcMap : Map <String , Any ?>): T {
77- val bucket : ArgumentBucket = function.getArgumentBucket ()
78- bindArguments(bucket , srcMap)
77+ val adaptor = function.getArgumentAdaptor ()
78+ bindArguments(adaptor , srcMap)
7979
80- return function.call(bucket )
80+ return function.call(adaptor )
8181 }
8282
8383 fun map (srcPair : Pair <String , Any ?>): T {
84- val bucket : ArgumentBucket = function.getArgumentBucket ()
85- bindArguments(bucket , srcPair)
84+ val adaptor = function.getArgumentAdaptor ()
85+ bindArguments(adaptor , srcPair)
8686
87- return function.call(bucket )
87+ return function.call(adaptor )
8888 }
8989
9090 fun map (src : Any ): T {
91- val bucket : ArgumentBucket = function.getArgumentBucket ()
92- bindArguments(bucket , src)
91+ val adaptor = function.getArgumentAdaptor ()
92+ bindArguments(adaptor , src)
9393
94- return function.call(bucket )
94+ return function.call(adaptor )
9595 }
9696
9797 fun map (vararg args : Any ): T {
98- val bucket : ArgumentBucket = function.getArgumentBucket ()
98+ val adaptor = function.getArgumentAdaptor ()
9999
100100 listOf (* args).forEach { arg ->
101101 when (arg) {
102- is Map <* , * > -> bindArguments(bucket , arg)
103- is Pair <* , * > -> bindArguments(bucket , arg)
104- else -> bindArguments(bucket , arg)
102+ is Map <* , * > -> bindArguments(adaptor , arg)
103+ is Pair <* , * > -> bindArguments(adaptor , arg)
104+ else -> bindArguments(adaptor , arg)
105105 }
106106 }
107107
108- return function.call(bucket )
108+ return function.call(adaptor )
109109 }
110110}
0 commit comments