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

Commit 561258a

Browse files
authored
Merge pull request #28 from k163377/feature
Improved processing efficiency.
2 parents 91e8bcc + ff01927 commit 561258a

File tree

4 files changed

+21
-28
lines changed

4 files changed

+21
-28
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "com.mapk"
9-
version = "0.14"
9+
version = "0.15"
1010

1111
java {
1212
sourceCompatibility = JavaVersion.VERSION_1_8

src/main/kotlin/com/mapk/core/internal/ArgumentBinder.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ internal sealed class ArgumentBinder(val annotations: List<Annotation>) {
2424
override val requiredClazz: KClass<T>
2525
) : ArgumentBinder(annotations), ValueParameter<T> {
2626
override fun bindArgument(adaptor: ArgumentAdaptor, valueArray: Array<Any?>): Boolean {
27-
return if (adaptor.isInitialized(name)) {
28-
valueArray[index] = adaptor.readout(name)
27+
val value = adaptor.readout(name)
28+
return if (value != null || adaptor.isInitialized(name)) {
29+
valueArray[index] = value
2930
true
3031
} else {
3132
false
@@ -43,7 +44,7 @@ internal sealed class ArgumentBinder(val annotations: List<Annotation>) {
4344
override fun bindArgument(adaptor: ArgumentAdaptor, valueArray: Array<Any?>): Boolean {
4445
val temp = function.call(adaptor)
4546

46-
if (!isNullable && temp == null) return false
47+
if (temp == null && !isNullable) return false
4748

4849
valueArray[index] = temp
4950
return true

src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.mapk.core.ArgumentAdaptor
44
import java.util.Objects
55
import kotlin.reflect.KParameter
66

7-
// TODO: 初期化の効率化方法の検討他
87
internal class ArgumentBucket(
98
private val keyList: List<KParameter>,
109
val valueArray: Array<Any?>,
@@ -17,35 +16,42 @@ internal class ArgumentBucket(
1716
override var value: Any?
1817
) : Map.Entry<KParameter, Any?>
1918

20-
private val initializationStatusManager = InitializationStatusManager(initializationStatus)
19+
private val initializationStatuses: List<Boolean>
2120
val isInitialized: Boolean
2221
override val size: Int
2322

2423
init {
24+
var count: Int = if (initializationStatus[0]) 1 else 0
25+
2526
argumentBinders.forEach {
2627
val result = it.bindArgument(adaptor, valueArray)
27-
if (result) initializationStatusManager.put(it.index)
28+
if (result) {
29+
count++
30+
initializationStatus[it.index] = true
31+
}
2832
}
2933

30-
isInitialized = initializationStatusManager.isFullInitialized
31-
size = initializationStatusManager.count
34+
initializationStatuses = initializationStatus.toList()
35+
isInitialized = count == initializationStatus.size
36+
size = count
3237
}
3338

34-
override fun containsKey(key: KParameter): Boolean = initializationStatusManager.isInitialized(key.index)
39+
override fun containsKey(key: KParameter): Boolean = initializationStatuses[key.index]
3540

3641
override fun containsValue(value: Any?): Boolean = valueArray.any { Objects.equals(value, it) }
3742

3843
override fun get(key: KParameter): Any? = valueArray[key.index]
3944

40-
override fun isEmpty(): Boolean = initializationStatusManager.count == 0
45+
override fun isEmpty(): Boolean = size == 0
4146

47+
// NOTE: 本来であれば生成時に確定する内容だが、これらのメソッドは関数呼び出し時にアクセスされることが無いため、カスタムゲッターとしている
4248
override val entries: Set<Map.Entry<KParameter, Any?>>
4349
get() = keyList
44-
.filter { initializationStatusManager.isInitialized(it.index) }
50+
.filter { initializationStatuses[it.index] }
4551
.map { Entry(it, valueArray[it.index]) }
4652
.toSet()
4753
override val keys: Set<KParameter>
48-
get() = keyList.filter { initializationStatusManager.isInitialized(it.index) }.toSet()
54+
get() = keyList.filter { initializationStatuses[it.index] }.toSet()
4955
override val values: Collection<Any?>
50-
get() = valueArray.filterIndexed { i, _ -> initializationStatusManager.isInitialized(i) }
56+
get() = valueArray.filterIndexed { i, _ -> initializationStatuses[i] }
5157
}

src/main/kotlin/com/mapk/core/internal/InitializationStatusManager.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)