11package com.mapk.core
22
3- import com.mapk.annotations.KConstructor
43import com.mapk.annotations.KParameterFlatten
54import com.mapk.core.internal.ArgumentBinder
65import com.mapk.core.internal.BucketGenerator
76import com.mapk.core.internal.ParameterNameConverter
87import com.mapk.core.internal.getAliasOrName
8+ import com.mapk.core.internal.getKConstructor
99import com.mapk.core.internal.isUseDefaultArgument
1010import kotlin.reflect.KClass
1111import kotlin.reflect.KFunction
1212import kotlin.reflect.KParameter
1313import kotlin.reflect.full.findAnnotation
14- import kotlin.reflect.full.primaryConstructor
1514import kotlin.reflect.jvm.isAccessible
16- import kotlin.reflect.jvm.jvmName
1715import org.jetbrains.annotations.TestOnly
1816
1917class KFunctionForCall <T > internal constructor(
@@ -86,30 +84,10 @@ class KFunctionForCall<T> internal constructor(
8684 }
8785}
8886
89- @Suppress(" UNCHECKED_CAST" )
90- internal fun <T : Any > KClass<T>.toKConstructor (parameterNameConverter : ParameterNameConverter ): KFunctionForCall <T > {
91- val constructors = ArrayList <KFunctionForCall <T >>()
92-
93- this .getAnnotatedFunctionsFromCompanionObject<KConstructor >()?.let { (instance, functions) ->
94- functions.forEach {
95- constructors.add(KFunctionForCall (it as KFunction <T >, parameterNameConverter, instance))
96- }
97- }
98-
99- this .constructors.getAnnotatedFunctions<KConstructor , T >().forEach {
100- constructors.add(KFunctionForCall (it, parameterNameConverter))
101- }
102-
103- if (constructors.size == 1 ) return constructors.single()
104-
105- if (constructors.isEmpty()) return KFunctionForCall (this .primaryConstructor!! , parameterNameConverter)
106-
107- throw IllegalArgumentException (" ${this .jvmName} has multiple ${KConstructor ::class .jvmName} ." )
108- }
109-
110- @Suppress(" UNCHECKED_CAST" )
11187fun <T : Any > KClass<T>.toKConstructor (parameterNameConverter : ((String ) -> String )? ): KFunctionForCall <T > =
112- this .toKConstructor(ParameterNameConverter .Simple (parameterNameConverter))
88+ this .getKConstructor().let { (instance, function) ->
89+ KFunctionForCall (function, ParameterNameConverter .Simple (parameterNameConverter), instance)
90+ }
11391
11492private fun KParameter.toArgumentBinder (parameterNameConverter : ParameterNameConverter ): ArgumentBinder {
11593 val name = getAliasOrName()!!
@@ -124,7 +102,9 @@ private fun KParameter.toArgumentBinder(parameterNameConverter: ParameterNameCon
124102 parameterNameConverter.toSimple()
125103 }
126104
127- ArgumentBinder .Function (getKClass().toKConstructor(converter), index, annotations)
105+ getKClass().getKConstructor().let { (instance, function) ->
106+ ArgumentBinder .Function (KFunctionForCall (function, converter, instance), index, annotations)
107+ }
128108 } ? : ArgumentBinder .Value (
129109 index,
130110 annotations,
0 commit comments