11package com.mapk.kmapper
22
3- import com.mapk.annotations.KConstructor
43import com.mapk.annotations.KGetterAlias
54import com.mapk.annotations.KGetterIgnore
65import com.mapk.core.ArgumentBucket
76import com.mapk.core.EnumMapper
87import com.mapk.core.KFunctionForCall
98import com.mapk.core.getAliasOrName
9+ import com.mapk.core.toKConstructor
1010import java.lang.reflect.Method
1111import kotlin.reflect.KClass
1212import kotlin.reflect.KFunction
1313import kotlin.reflect.KParameter
1414import kotlin.reflect.KVisibility
15- import kotlin.reflect.full.companionObjectInstance
16- import kotlin.reflect.full.functions
1715import kotlin.reflect.full.isSuperclassOf
1816import kotlin.reflect.full.memberProperties
19- import kotlin.reflect.full.primaryConstructor
2017import kotlin.reflect.jvm.javaGetter
2118
2219class KMapper <T : Any > private constructor(
@@ -28,7 +25,7 @@ class KMapper<T : Any> private constructor(
2825 )
2926
3027 constructor (clazz: KClass <T >, propertyNameConverter: (String ) -> String = { it }) : this (
31- getTarget( clazz), propertyNameConverter
28+ clazz.toKConstructor( ), propertyNameConverter
3229 )
3330
3431 private val parameterMap: Map <String , ParameterForMap <* >> = function.parameters
@@ -113,29 +110,6 @@ class KMapper<T : Any> private constructor(
113110 }
114111}
115112
116- @Suppress(" UNCHECKED_CAST" )
117- internal fun <T : Any > getTarget (clazz : KClass <T >): KFunctionForCall <T > {
118- val factoryConstructor: List <KFunctionForCall <T >> =
119- clazz.companionObjectInstance?.let { companionObject ->
120- companionObject::class .functions
121- .filter { it.annotations.any { annotation -> annotation is KConstructor } }
122- .map { KFunctionForCall (
123- it,
124- companionObject
125- ) as KFunctionForCall <T > }
126- } ? : emptyList()
127-
128- val constructors: List <KFunctionForCall <T >> = factoryConstructor + clazz.constructors
129- .filter { it.annotations.any { annotation -> annotation is KConstructor } }
130- .map { KFunctionForCall (it) }
131-
132- if (constructors.size == 1 ) return constructors.single()
133-
134- if (constructors.isEmpty()) return KFunctionForCall (clazz.primaryConstructor!! )
135-
136- throw IllegalArgumentException (" Find multiple target." )
137- }
138-
139113private fun <T : Any , R : Any > mapObject (param : ParameterForMap <R >, value : T ): Any? {
140114 val valueClazz: KClass <* > = value::class
141115
0 commit comments