From cf1b708e1d2bf636c34ef77fc7db86f727c1ab7c Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 02:22:38 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E5=8F=96=E5=BE=97=E5=87=A6=E7=90=86=E3=81=AF?= =?UTF-8?q?=E9=9D=9E=E5=B8=B8=E3=81=AB=E9=87=8D=E3=81=84=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=80=81=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=84=E9=96=93=E3=81=AF?= =?UTF-8?q?=E5=88=9D=E6=9C=9F=E5=8C=96=E3=81=97=E3=81=AA=E3=81=84=E3=82=88?= =?UTF-8?q?=E3=81=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt | 3 ++- src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt index 3842f67..1baa3f5 100644 --- a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt @@ -20,8 +20,9 @@ internal class ParameterForMap( } // リストの長さが小さいと期待されるためこの形で実装しているが、理想的にはmap的なものが使いたい @Suppress("UNCHECKED_CAST") - private val converters: Set, KFunction>> = + private val converters: Set, KFunction>> by lazy { (param.getConverters() as Set, KFunction>>) + clazz.getConverters() + } private val convertCache: ConcurrentMap, ParameterProcessor> = ConcurrentHashMap() diff --git a/src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt index eab051e..cc2ddda 100644 --- a/src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/PlainParameterForMap.kt @@ -17,8 +17,9 @@ internal class PlainParameterForMap( } // リストの長さが小さいと期待されるためこの形で実装しているが、理想的にはmap的なものが使いたい @Suppress("UNCHECKED_CAST") - private val converters: Set, KFunction>> = + private val converters: Set, KFunction>> by lazy { (param.getConverters() as Set, KFunction>>) + clazz.getConverters() + } fun mapObject(value: U): Any? { val valueClazz: KClass<*> = value::class From da39df423d00cdb87a561e816c79bae7cca7a7e3 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 08:31:33 +0900 Subject: [PATCH 2/6] =?UTF-8?q?shared=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b9b731c..05008aa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ repositories { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation(kotlin("reflect")) - api("com.github.ProjectMapK:Shared:0.13") + api("com.github.ProjectMapK:Shared:0.14") // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.2") { From 7617d0dd76849adadd1aec5314407cbaea474993 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 08:32:04 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BoundKMapperでは初期化チェックが必要ないためforcePutを利用する --- src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt index ec67db6..1d6aa04 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt @@ -55,7 +55,7 @@ class BoundKMapper private constructor( val adaptor = function.getArgumentAdaptor() parameters.forEach { - adaptor.putIfAbsent(it.name, it.map(src)) + adaptor.forcePut(it.name, it.map(src)) } return function.call(adaptor) From 7c2097a4bfe1820af3985ceceb7b72a5d5911c4d Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 08:32:35 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初期化判定の重複を解消 --- src/main/kotlin/com/mapk/kmapper/KMapper.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/KMapper.kt b/src/main/kotlin/com/mapk/kmapper/KMapper.kt index 3677df3..4bb3508 100644 --- a/src/main/kotlin/com/mapk/kmapper/KMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/KMapper.kt @@ -128,10 +128,8 @@ class KMapper private constructor( private class ArgumentBinder(private val param: ParameterForMap<*>, private val javaGetter: Method) { fun bindArgument(src: Any, adaptor: ArgumentAdaptor) { - // 初期化済みであれば高コストな取得処理は行わない - if (!adaptor.isInitialized(param.name)) { - // javaGetterを呼び出す方が高速 - adaptor.putIfAbsent(param.name, javaGetter.invoke(src)?.let { param.mapObject(it) }) + adaptor.putIfAbsent(param.name) { + javaGetter.invoke(src)?.let { param.mapObject(it) } } } } From 34a03d64869931a4557d4af95c19b5c6b7748b2c Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 08:32:45 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/PlainKMapper.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/PlainKMapper.kt b/src/main/kotlin/com/mapk/kmapper/PlainKMapper.kt index b1ab323..3bdb25e 100644 --- a/src/main/kotlin/com/mapk/kmapper/PlainKMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/PlainKMapper.kt @@ -47,7 +47,7 @@ class PlainKMapper private constructor( parameterMap[alias!!]?.let { // javaGetterを呼び出す方が高速 javaGetter.isAccessible = true - argumentAdaptor.putIfAbsent(alias!!, javaGetter.invoke(src)?.let { value -> it.mapObject(value) }) + argumentAdaptor.putIfAbsent(alias!!) { javaGetter.invoke(src)?.let { value -> it.mapObject(value) } } // 終了判定 if (argumentAdaptor.isFullInitialized()) return } @@ -58,7 +58,7 @@ class PlainKMapper private constructor( src.forEach { (key, value) -> parameterMap[key]?.let { param -> // 取得した内容がnullでなければ適切にmapする - argumentAdaptor.putIfAbsent(key as String, value?.let { param.mapObject(value) }) + argumentAdaptor.putIfAbsent(key as String) { value?.let { param.mapObject(value) } } // 終了判定 if (argumentAdaptor.isFullInitialized()) return } @@ -69,7 +69,7 @@ class PlainKMapper private constructor( val key = srcPair.first.toString() parameterMap[key]?.let { - argumentBucket.putIfAbsent(key, srcPair.second?.let { value -> it.mapObject(value) }) + argumentBucket.putIfAbsent(key) { srcPair.second?.let { value -> it.mapObject(value) } } } } From 4fc611651cb44bd1b9b25c22d24d8cf51a098df7 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 09:07:10 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/KMapper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/KMapper.kt b/src/main/kotlin/com/mapk/kmapper/KMapper.kt index 4bb3508..2dc5d47 100644 --- a/src/main/kotlin/com/mapk/kmapper/KMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/KMapper.kt @@ -75,7 +75,7 @@ class KMapper private constructor( src.forEach { (key, value) -> parameterMap[key]?.let { param -> // 取得した内容がnullでなければ適切にmapする - argumentAdaptor.putIfAbsent(param.name, value?.let { param.mapObject(value) }) + argumentAdaptor.putIfAbsent(param.name) { value?.let { param.mapObject(value) } } // 終了判定 if (argumentAdaptor.isFullInitialized()) return } @@ -86,7 +86,7 @@ class KMapper private constructor( val key = srcPair.first.toString() parameterMap[key]?.let { - argumentAdaptor.putIfAbsent(key, srcPair.second?.let { value -> it.mapObject(value) }) + argumentAdaptor.putIfAbsent(key) { srcPair.second?.let { value -> it.mapObject(value) } } } }