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

Commit 9c799c3

Browse files
committed
引数はバケツクラスで管理するように修正
1 parent 4e78bbe commit 9c799c3

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

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

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,33 @@ import kotlin.reflect.jvm.isAccessible
66

77
class KFunctionForCall<T>(private val function: KFunction<T>, instance: Any? = null) {
88
val parameters: List<KParameter> = function.parameters
9-
private val originalArgumentBucket: List<Any?>
10-
val argumentBucket: Array<Any?> get() = originalArgumentBucket.toTypedArray()
9+
private val originalArgumentBucket: ArgumentBucket
10+
11+
fun getArgumentBucket(): ArgumentBucket = originalArgumentBucket.clone()
1112

1213
init {
1314
// この関数には確実にアクセスするためアクセシビリティ書き換え
1415
function.isAccessible = true
1516
originalArgumentBucket = if (instance != null) {
16-
List(parameters.size) { if (it == 0) instance else null }
17+
ArgumentBucket(
18+
Array(parameters.size) { if (it == 0) instance else null },
19+
1,
20+
generateSequence(1) { it.shl(1) }
21+
.take(parameters.size)
22+
.toList()
23+
)
1724
} else {
18-
List(parameters.size) { null }
25+
ArgumentBucket(
26+
Array(parameters.size) { null },
27+
0,
28+
generateSequence(1) { it.shl(1) }
29+
.take(parameters.size)
30+
.toList()
31+
)
1932
}
2033
}
2134

22-
fun call(arguments: Array<Any?>): T {
23-
return function.call(*arguments)
35+
fun call(argumentBucket: ArgumentBucket): T {
36+
return function.call(*argumentBucket.bucket)
2437
}
2538
}

0 commit comments

Comments
 (0)