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

Commit fa1f271

Browse files
committed
ArgumentAdaptorを利用してバインドする形式に修正
1 parent 0435be3 commit fa1f271

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

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

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package com.mapk.kmapper
22

33
import com.mapk.annotations.KGetterAlias
44
import com.mapk.annotations.KGetterIgnore
5-
import com.mapk.core.ArgumentBucket
5+
import com.mapk.core.ArgumentAdaptor
66
import com.mapk.core.KFunctionForCall
7-
import com.mapk.core.getAliasOrName
8-
import com.mapk.core.isUseDefaultArgument
97
import com.mapk.core.toKConstructor
108
import java.lang.reflect.Method
119
import kotlin.reflect.KClass
1210
import kotlin.reflect.KFunction
13-
import kotlin.reflect.KParameter
1411
import kotlin.reflect.KVisibility
1512
import kotlin.reflect.full.memberProperties
1613
import 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

Comments
 (0)