@@ -4,15 +4,16 @@ import com.mapk.annotations.KColumnDeserializer
4
4
import com.mapk.core.EnumMapper
5
5
import com.mapk.core.KFunctionWithInstance
6
6
import com.mapk.core.ValueParameter
7
+ import com.mapk.core.getAnnotatedFunctions
8
+ import com.mapk.core.getAnnotatedFunctionsFromCompanionObject
9
+ import com.mapk.core.getKClass
7
10
import com.mapk.deserialization.AbstractKColumnDeserializer
8
11
import com.mapk.deserialization.KColumnDeserializeBy
9
12
import java.lang.IllegalArgumentException
10
13
import java.sql.ResultSet
11
14
import kotlin.reflect.KClass
12
15
import kotlin.reflect.KFunction
13
- import kotlin.reflect.full.companionObjectInstance
14
16
import kotlin.reflect.full.findAnnotation
15
- import kotlin.reflect.full.functions
16
17
import kotlin.reflect.full.primaryConstructor
17
18
import kotlin.reflect.full.staticFunctions
18
19
import kotlin.reflect.jvm.isAccessible
@@ -57,7 +58,7 @@ internal sealed class ParameterForMap {
57
58
}
58
59
59
60
param.requiredClazz.getDeserializer()?.let {
60
- val targetClass = ( it.parameters.single().type.classifier as KClass < * > ).javaObjectType
61
+ val targetClass = it.parameters.single().getKClass( ).javaObjectType
61
62
return Deserializer (param.name, targetClass, it)
62
63
}
63
64
@@ -97,8 +98,7 @@ private fun <T : Any> KClass<T>.getDeserializer(): KFunction<T>? {
97
98
}
98
99
99
100
private 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 }
102
102
}
103
103
104
104
private fun <T : Any > deserializerFromConstructors (clazz : KClass <T >): Collection <KFunction <T >> {
@@ -113,14 +113,9 @@ private fun <T : Any> deserializerFromStaticMethods(clazz: KClass<T>): Collectio
113
113
114
114
@Suppress(" UNCHECKED_CAST" )
115
115
private 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
+ }
125
120
} ? : emptySet()
126
121
}
0 commit comments