@@ -3,6 +3,7 @@ package com.mapk.core
33import com.mapk.annotations.KParameterFlatten
44import com.mapk.core.internal.ArgumentBinder
55import com.mapk.core.internal.BucketGenerator
6+ import com.mapk.core.internal.FullInitializedFunctionWrapper
67import com.mapk.core.internal.ParameterNameConverter
78import com.mapk.core.internal.getAliasOrName
89import com.mapk.core.internal.getKConstructor
@@ -13,7 +14,6 @@ import kotlin.reflect.KFunction
1314import kotlin.reflect.KParameter
1415import kotlin.reflect.full.findAnnotation
1516import kotlin.reflect.jvm.isAccessible
16- import kotlin.reflect.jvm.javaConstructor
1717
1818class KFunctionForCall <T > internal constructor(
1919 @TestOnly
@@ -28,9 +28,7 @@ class KFunctionForCall<T> internal constructor(
2828 )
2929
3030 @TestOnly
31- internal val fullInitializedFunctionLambda: (Array <Any ?>) -> T = function.javaConstructor?.let {
32- { values -> it.newInstance(* values) }
33- } ? : { function.call(* it) }
31+ internal val fullInitializedWrapper: FullInitializedFunctionWrapper <T >
3432
3533 @TestOnly
3634 internal val parameters: List <KParameter > = function.parameters
@@ -48,6 +46,8 @@ class KFunctionForCall<T> internal constructor(
4846 // この関数には確実にアクセスするためアクセシビリティ書き換え
4947 function.isAccessible = true
5048
49+ fullInitializedWrapper = FullInitializedFunctionWrapper (function, instance, parameters.size)
50+
5151 val tempBinders = ArrayList <ArgumentBinder >()
5252 val tempList = ArrayList <ValueParameter <* >>()
5353 val tempMap = HashMap <String , ValueParameter <* >>()
@@ -86,7 +86,7 @@ class KFunctionForCall<T> internal constructor(
8686
8787 fun call (adaptor : ArgumentAdaptor ): T {
8888 val bucket = bucketGenerator.generate(adaptor)
89- return if (bucket.isInitialized) fullInitializedFunctionLambda (bucket.valueArray) else function.callBy(bucket)
89+ return if (bucket.isInitialized) fullInitializedWrapper.call (bucket.valueArray) else function.callBy(bucket)
9090 }
9191}
9292
0 commit comments