From 45685672ef5949db11a4c0f440b83f1e3bcf5775 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 16:54:11 +0900 Subject: [PATCH 1/5] =?UTF-8?q?mutability=E3=81=8C=E7=84=A1=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81=E3=80=81manager?= =?UTF-8?q?=E7=84=A1=E3=81=97=E3=81=A7=E5=9B=9E=E3=81=99=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/core/internal/ArgumentBucket.kt | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt b/src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt index fa7d1b1..3ae837c 100644 --- a/src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt +++ b/src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt @@ -4,7 +4,6 @@ import com.mapk.core.ArgumentAdaptor import java.util.Objects import kotlin.reflect.KParameter -// TODO: 初期化の効率化方法の検討他 internal class ArgumentBucket( private val keyList: List, val valueArray: Array, @@ -17,35 +16,42 @@ internal class ArgumentBucket( override var value: Any? ) : Map.Entry - private val initializationStatusManager = InitializationStatusManager(initializationStatus) + private val initializationStatuses: List val isInitialized: Boolean override val size: Int init { + var count: Int = if (initializationStatus[0]) 1 else 0 + argumentBinders.forEach { val result = it.bindArgument(adaptor, valueArray) - if (result) initializationStatusManager.put(it.index) + if (result) { + count++ + initializationStatus[it.index] = true + } } - isInitialized = initializationStatusManager.isFullInitialized - size = initializationStatusManager.count + initializationStatuses = initializationStatus.toList() + isInitialized = count == initializationStatus.size + size = count } - override fun containsKey(key: KParameter): Boolean = initializationStatusManager.isInitialized(key.index) + override fun containsKey(key: KParameter): Boolean = initializationStatuses[key.index] override fun containsValue(value: Any?): Boolean = valueArray.any { Objects.equals(value, it) } override fun get(key: KParameter): Any? = valueArray[key.index] - override fun isEmpty(): Boolean = initializationStatusManager.count == 0 + override fun isEmpty(): Boolean = size == 0 + // NOTE: 本来であれば生成時に確定する内容だが、これらのメソッドは関数呼び出し時にアクセスされることが無いため、カスタムゲッターとしている override val entries: Set> get() = keyList - .filter { initializationStatusManager.isInitialized(it.index) } + .filter { initializationStatuses[it.index] } .map { Entry(it, valueArray[it.index]) } .toSet() override val keys: Set - get() = keyList.filter { initializationStatusManager.isInitialized(it.index) }.toSet() + get() = keyList.filter { initializationStatuses[it.index] }.toSet() override val values: Collection - get() = valueArray.filterIndexed { i, _ -> initializationStatusManager.isInitialized(i) } + get() = valueArray.filterIndexed { i, _ -> initializationStatuses[i] } } From 0ffe7a8da0846f6467fe675ee21d1f604a6e85ec Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 16:54:20 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E5=89=8A=E9=99=A4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/internal/InitializationStatusManager.kt | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 src/main/kotlin/com/mapk/core/internal/InitializationStatusManager.kt diff --git a/src/main/kotlin/com/mapk/core/internal/InitializationStatusManager.kt b/src/main/kotlin/com/mapk/core/internal/InitializationStatusManager.kt deleted file mode 100644 index 73b773e..0000000 --- a/src/main/kotlin/com/mapk/core/internal/InitializationStatusManager.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.mapk.core.internal - -internal class InitializationStatusManager(private val initializationStatus: Array) { - private val size = initializationStatus.size - val isFullInitialized: Boolean get() = count == size - var count: Int = if (initializationStatus[0]) 1 else 0 - - fun isInitialized(index: Int): Boolean = initializationStatus[index] - - fun put(index: Int) { - initializationStatus[index] = true - count++ - } -} From eaf2d7307a96e289bc6e1bf29cdf0abeb9d1362a Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 17:00:22 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=E5=80=A4=E8=AA=AD=E3=81=BF=E5=87=BA?= =?UTF-8?q?=E3=81=97=E6=99=82=E3=80=81null=E3=81=98=E3=82=83=E3=81=AA?= =?UTF-8?q?=E3=81=91=E3=82=8C=E3=81=B0=E3=81=9D=E3=81=AE=E3=81=BE=E3=81=BE?= =?UTF-8?q?=E4=BB=A3=E5=85=A5=E3=81=97=E3=81=A6=E3=82=88=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=82=81=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/core/internal/ArgumentBinder.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt b/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt index d10729d..0f7d280 100644 --- a/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt +++ b/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt @@ -24,8 +24,9 @@ internal sealed class ArgumentBinder(val annotations: List) { override val requiredClazz: KClass ) : ArgumentBinder(annotations), ValueParameter { override fun bindArgument(adaptor: ArgumentAdaptor, valueArray: Array): Boolean { - return if (adaptor.isInitialized(name)) { - valueArray[index] = adaptor.readout(name) + val value = adaptor.readout(name) + return if (value != null || adaptor.isInitialized(name)) { + valueArray[index] = value true } else { false From 45b3042e20d5366c8168dca4fcdeaefb1426efd7 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 17:01:29 +0900 Subject: [PATCH 4/5] =?UTF-8?q?null=E3=81=A7=E3=81=AA=E3=81=91=E3=82=8C?= =?UTF-8?q?=E3=81=B0nullability=E3=81=AE=E5=88=A4=E5=AE=9A=E3=81=AF?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=A0=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81?= =?UTF-8?q?=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/core/internal/ArgumentBinder.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt b/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt index 0f7d280..c80e746 100644 --- a/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt +++ b/src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt @@ -44,7 +44,7 @@ internal sealed class ArgumentBinder(val annotations: List) { override fun bindArgument(adaptor: ArgumentAdaptor, valueArray: Array): Boolean { val temp = function.call(adaptor) - if (!isNullable && temp == null) return false + if (temp == null && !isNullable) return false valueArray[index] = temp return true From ff019271dd0e9d10b29c6a586be7eb353edbcf9e Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 17 May 2020 17:59:03 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=A2=E3=83=83=E3=83=97?= 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 cee5e1d..224c400 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "com.mapk" -version = "0.14" +version = "0.15" java { sourceCompatibility = JavaVersion.VERSION_1_8