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

Commit 718109f

Browse files
authored
Merge pull request #33 from k163377/feature
Improved processing efficiency.
2 parents 125d976 + 4fc6116 commit 718109f

File tree

6 files changed

+13
-13
lines changed

6 files changed

+13
-13
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ repositories {
3030
dependencies {
3131
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
3232
implementation(kotlin("reflect"))
33-
api("com.github.ProjectMapK:Shared:0.13")
33+
api("com.github.ProjectMapK:Shared:0.14")
3434

3535
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
3636
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.2") {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class BoundKMapper<S : Any, D : Any> private constructor(
5555
val adaptor = function.getArgumentAdaptor()
5656

5757
parameters.forEach {
58-
adaptor.putIfAbsent(it.name, it.map(src))
58+
adaptor.forcePut(it.name, it.map(src))
5959
}
6060

6161
return function.call(adaptor)

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class KMapper<T : Any> private constructor(
7575
src.forEach { (key, value) ->
7676
parameterMap[key]?.let { param ->
7777
// 取得した内容がnullでなければ適切にmapする
78-
argumentAdaptor.putIfAbsent(param.name, value?.let { param.mapObject(value) })
78+
argumentAdaptor.putIfAbsent(param.name) { value?.let { param.mapObject(value) } }
7979
// 終了判定
8080
if (argumentAdaptor.isFullInitialized()) return
8181
}
@@ -86,7 +86,7 @@ class KMapper<T : Any> private constructor(
8686
val key = srcPair.first.toString()
8787

8888
parameterMap[key]?.let {
89-
argumentAdaptor.putIfAbsent(key, srcPair.second?.let { value -> it.mapObject(value) })
89+
argumentAdaptor.putIfAbsent(key) { srcPair.second?.let { value -> it.mapObject(value) } }
9090
}
9191
}
9292

@@ -128,10 +128,8 @@ class KMapper<T : Any> private constructor(
128128

129129
private class ArgumentBinder(private val param: ParameterForMap<*>, private val javaGetter: Method) {
130130
fun bindArgument(src: Any, adaptor: ArgumentAdaptor) {
131-
// 初期化済みであれば高コストな取得処理は行わない
132-
if (!adaptor.isInitialized(param.name)) {
133-
// javaGetterを呼び出す方が高速
134-
adaptor.putIfAbsent(param.name, javaGetter.invoke(src)?.let { param.mapObject(it) })
131+
adaptor.putIfAbsent(param.name) {
132+
javaGetter.invoke(src)?.let { param.mapObject(it) }
135133
}
136134
}
137135
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ internal class ParameterForMap<T : Any>(
2020
}
2121
// リストの長さが小さいと期待されるためこの形で実装しているが、理想的にはmap的なものが使いたい
2222
@Suppress("UNCHECKED_CAST")
23-
private val converters: Set<Pair<KClass<*>, KFunction<T>>> =
23+
private val converters: Set<Pair<KClass<*>, KFunction<T>>> by lazy {
2424
(param.getConverters() as Set<Pair<KClass<*>, KFunction<T>>>) + clazz.getConverters()
25+
}
2526

2627
private val convertCache: ConcurrentMap<KClass<*>, ParameterProcessor> = ConcurrentHashMap()
2728

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class PlainKMapper<T : Any> private constructor(
4747
parameterMap[alias!!]?.let {
4848
// javaGetterを呼び出す方が高速
4949
javaGetter.isAccessible = true
50-
argumentAdaptor.putIfAbsent(alias!!, javaGetter.invoke(src)?.let { value -> it.mapObject(value) })
50+
argumentAdaptor.putIfAbsent(alias!!) { javaGetter.invoke(src)?.let { value -> it.mapObject(value) } }
5151
// 終了判定
5252
if (argumentAdaptor.isFullInitialized()) return
5353
}
@@ -58,7 +58,7 @@ class PlainKMapper<T : Any> private constructor(
5858
src.forEach { (key, value) ->
5959
parameterMap[key]?.let { param ->
6060
// 取得した内容がnullでなければ適切にmapする
61-
argumentAdaptor.putIfAbsent(key as String, value?.let { param.mapObject(value) })
61+
argumentAdaptor.putIfAbsent(key as String) { value?.let { param.mapObject(value) } }
6262
// 終了判定
6363
if (argumentAdaptor.isFullInitialized()) return
6464
}
@@ -69,7 +69,7 @@ class PlainKMapper<T : Any> private constructor(
6969
val key = srcPair.first.toString()
7070

7171
parameterMap[key]?.let {
72-
argumentBucket.putIfAbsent(key, srcPair.second?.let { value -> it.mapObject(value) })
72+
argumentBucket.putIfAbsent(key) { srcPair.second?.let { value -> it.mapObject(value) } }
7373
}
7474
}
7575

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ internal class PlainParameterForMap<T : Any>(
1717
}
1818
// リストの長さが小さいと期待されるためこの形で実装しているが、理想的にはmap的なものが使いたい
1919
@Suppress("UNCHECKED_CAST")
20-
private val converters: Set<Pair<KClass<*>, KFunction<T>>> =
20+
private val converters: Set<Pair<KClass<*>, KFunction<T>>> by lazy {
2121
(param.getConverters() as Set<Pair<KClass<*>, KFunction<T>>>) + clazz.getConverters()
22+
}
2223

2324
fun <U : Any> mapObject(value: U): Any? {
2425
val valueClazz: KClass<*> = value::class

0 commit comments

Comments
 (0)