@@ -4,15 +4,16 @@ import com.mapk.annotations.KColumnDeserializer
44import com.mapk.core.EnumMapper
55import com.mapk.core.KFunctionWithInstance
66import com.mapk.core.ValueParameter
7+ import com.mapk.core.getAnnotatedFunctions
8+ import com.mapk.core.getAnnotatedFunctionsFromCompanionObject
9+ import com.mapk.core.getKClass
710import com.mapk.deserialization.AbstractKColumnDeserializer
811import com.mapk.deserialization.KColumnDeserializeBy
912import java.lang.IllegalArgumentException
1013import java.sql.ResultSet
1114import kotlin.reflect.KClass
1215import kotlin.reflect.KFunction
13- import kotlin.reflect.full.companionObjectInstance
1416import kotlin.reflect.full.findAnnotation
15- import kotlin.reflect.full.functions
1617import kotlin.reflect.full.primaryConstructor
1718import kotlin.reflect.full.staticFunctions
1819import kotlin.reflect.jvm.isAccessible
@@ -57,7 +58,7 @@ internal sealed class ParameterForMap {
5758 }
5859
5960 param.requiredClazz.getDeserializer()?.let {
60- val targetClass = ( it.parameters.single().type.classifier as KClass < * > ).javaObjectType
61+ val targetClass = it.parameters.single().getKClass( ).javaObjectType
6162 return Deserializer (param.name, targetClass, it)
6263 }
6364
@@ -97,8 +98,7 @@ private fun <T : Any> KClass<T>.getDeserializer(): KFunction<T>? {
9798}
9899
99100private fun <T > Collection<KFunction<T>>.getDeserializerFromFunctions (): Collection <KFunction <T >> {
100- return filter { it.annotations.any { annotation -> annotation is KColumnDeserializer } }
101- .onEach { it.isAccessible = true }
101+ return getAnnotatedFunctions<KColumnDeserializer , T >().onEach { it.isAccessible = true }
102102}
103103
104104private fun <T : Any > deserializerFromConstructors (clazz : KClass <T >): Collection <KFunction <T >> {
@@ -113,14 +113,9 @@ private fun <T : Any> deserializerFromStaticMethods(clazz: KClass<T>): Collectio
113113
114114@Suppress(" UNCHECKED_CAST" )
115115private fun <T : Any > deserializerFromCompanionObject (clazz : KClass <T >): Collection <KFunction <T >> {
116- return clazz.companionObjectInstance?.let { companionObject ->
117- companionObject::class .functions
118- .filter { it.annotations.any { annotation -> annotation is KColumnDeserializer } }
119- .map { function ->
120- KFunctionWithInstance (
121- function,
122- companionObject
123- ) as KFunction <T >
124- }.toSet()
116+ return clazz.getAnnotatedFunctionsFromCompanionObject<KColumnDeserializer >()?.let { (instance, functions) ->
117+ functions.map {
118+ KFunctionWithInstance (it, instance) as KFunction <T >
119+ }
125120 } ? : emptySet()
126121}
0 commit comments