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

Commit 5fbd112

Browse files
authored
Merge pull request #12 from k163377/feature
Update and fix ArgumentBucket.
2 parents d10cb4c + 13cfc42 commit 5fbd112

File tree

4 files changed

+20
-23
lines changed

4 files changed

+20
-23
lines changed

build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
plugins {
22
id("maven")
33
id("java")
4-
id("org.jetbrains.kotlin.jvm") version "1.3.70"
4+
id("org.jetbrains.kotlin.jvm") version "1.3.71"
55
id("org.jlleitschuh.gradle.ktlint") version "9.2.1"
66
}
77

88
group = "com.mapk"
9-
version = "0.9"
9+
version = "0.10"
1010

1111
java {
1212
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -18,7 +18,7 @@ buildscript {
1818
}
1919

2020
dependencies {
21-
classpath(kotlin("gradle-plugin", version = "1.3.70"))
21+
classpath(kotlin("gradle-plugin", version = "1.3.71"))
2222
}
2323
}
2424

@@ -33,7 +33,7 @@ dependencies {
3333
implementation(group = "org.jetbrains", name = "annotations", version = "19.0.0")
3434

3535
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
36-
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.0") {
36+
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.1") {
3737
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
3838
}
3939
// https://mvnrepository.com/artifact/io.mockk/mockk

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import java.util.Objects
44
import kotlin.reflect.KParameter
55

66
class ArgumentBucket internal constructor(
7-
private val keyArray: Array<KParameter?>,
7+
private val keyList: List<KParameter>,
88
internal val valueArray: Array<Any?>,
99
private val isRequireNonNull: List<Boolean>,
1010
private val initializationStatusManager: InitializationStatusManager
@@ -22,8 +22,7 @@ class ArgumentBucket internal constructor(
2222
override val size: Int get() = count
2323

2424
override fun containsKey(key: KParameter): Boolean {
25-
// NOTE: もしかしたらステータスを見た方が速いかも
26-
return keyArray[key.index] != null
25+
return initializationStatusManager.isInitialized(key.index)
2726
}
2827

2928
override fun containsValue(value: Any?): Boolean = valueArray.any { Objects.equals(value, it) }
@@ -36,11 +35,14 @@ class ArgumentBucket internal constructor(
3635
override fun isEmpty(): Boolean = count == 0
3736

3837
override val entries: Set<Map.Entry<KParameter, Any?>>
39-
get() = keyArray.mapNotNull { it?.let { Entry(it, valueArray[it.index]) } }.toSet()
40-
override val keys: MutableSet<KParameter>
41-
get() = keyArray.filterNotNull().toMutableSet()
42-
override val values: MutableCollection<Any?>
43-
get() = valueArray.filterIndexed { i, _ -> initializationStatusManager.isInitialized(i) }.toMutableList()
38+
get() = keyList
39+
.filter { initializationStatusManager.isInitialized(it.index) }
40+
.map { Entry(it, valueArray[it.index]) }
41+
.toSet()
42+
override val keys: Set<KParameter>
43+
get() = keyList.filter { initializationStatusManager.isInitialized(it.index) }.toSet()
44+
override val values: Collection<Any?>
45+
get() = valueArray.filterIndexed { i, _ -> initializationStatusManager.isInitialized(i) }
4446

4547
fun putIfAbsent(key: KParameter, value: Any?) {
4648
val index = key.index
@@ -53,7 +55,6 @@ class ArgumentBucket internal constructor(
5355

5456
count += 1
5557
initializationStatusManager.put(index)
56-
keyArray[index] = key
5758
valueArray[index] = value
5859

5960
return

src/main/kotlin/com/mapk/core/BucketGenerator.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package com.mapk.core
33
import com.mapk.annotations.KParameterRequireNonNull
44
import kotlin.reflect.KParameter
55

6-
internal class BucketGenerator(parameters: List<KParameter>, instancePair: Pair<KParameter, Any>?) {
6+
internal class BucketGenerator(private val parameters: List<KParameter>, instance: Any?) {
77
private val initializationStatus: Array<Boolean>
88
private val isRequireNonNull: List<Boolean>
9-
private val keyArray: Array<KParameter?>
109
private val valueArray: Array<Any?>
1110

1211
init {
@@ -16,12 +15,10 @@ internal class BucketGenerator(parameters: List<KParameter>, instancePair: Pair<
1615
}
1716
initializationStatus = Array(capacity) { false }
1817

19-
keyArray = arrayOfNulls(capacity)
2018
valueArray = arrayOfNulls(capacity)
2119

22-
if (instancePair != null) {
23-
keyArray[0] = instancePair.first
24-
valueArray[0] = instancePair.second
20+
if (instance != null) {
21+
valueArray[0] = instance
2522
initializationStatus[0] = true
2623
} else {
2724
initializationStatus[0] = false
@@ -30,7 +27,7 @@ internal class BucketGenerator(parameters: List<KParameter>, instancePair: Pair<
3027

3128
fun generate(): ArgumentBucket {
3229
return ArgumentBucket(
33-
keyArray.clone(),
30+
parameters,
3431
valueArray.clone(),
3532
isRequireNonNull,
3633
InitializationStatusManager(initializationStatus.clone())

src/main/kotlin/com/mapk/core/KFunctionForCall.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ class KFunctionForCall<T>(internal val function: KFunction<T>, instance: Any? =
2020
// この関数には確実にアクセスするためアクセシビリティ書き換え
2121
function.isAccessible = true
2222

23-
generator = BucketGenerator(
24-
parameters, instance?.let { parameters.first { param -> param.kind == KParameter.Kind.INSTANCE } to it }
25-
)
23+
// パラメータのチェックを済ませてから初期化しないとエラーになる
24+
generator = BucketGenerator(parameters, instance)
2625
}
2726

2827
fun getArgumentBucket(): ArgumentBucket = generator.generate()

0 commit comments

Comments
 (0)