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
@@ -11,9 +10,7 @@ import kotlin.reflect.KClass
1110import kotlin.reflect.KFunction
1211import kotlin.reflect.KParameter
1312import kotlin.reflect.full.findAnnotation
14- import kotlin.reflect.full.primaryConstructor
1513import kotlin.reflect.jvm.isAccessible
16- import kotlin.reflect.jvm.jvmName
1714import org.jetbrains.annotations.TestOnly
1815
1916class KFunctionForCall <T > internal constructor(
@@ -86,30 +83,10 @@ class KFunctionForCall<T> internal constructor(
8683 }
8784}
8885
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" )
11186fun <T : Any > KClass<T>.toKConstructor (parameterNameConverter : ((String ) -> String )? ): KFunctionForCall <T > =
112- this .toKConstructor(ParameterNameConverter .Simple (parameterNameConverter))
87+ this .getKConstructor().let { (instance, function) ->
88+ KFunctionForCall (function, ParameterNameConverter .Simple (parameterNameConverter), instance)
89+ }
11390
11491private fun KParameter.toArgumentBinder (parameterNameConverter : ParameterNameConverter ): ArgumentBinder {
11592 val name = getAliasOrName()!!
@@ -124,7 +101,9 @@ private fun KParameter.toArgumentBinder(parameterNameConverter: ParameterNameCon
124101 parameterNameConverter.toSimple()
125102 }
126103
127- ArgumentBinder .Function (getKClass().toKConstructor(converter), index, annotations)
104+ getKClass().getKConstructor().let { (instance, function) ->
105+ ArgumentBinder .Function (KFunctionForCall (function, converter, instance), index, annotations)
106+ }
128107 } ? : ArgumentBinder .Value (
129108 index,
130109 annotations,
0 commit comments