diff --git a/build.gradle.kts b/build.gradle.kts index 1efed45..2be26da 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ repositories { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation(kotlin("reflect")) - implementation("com.github.ProjectMapK:Shared:0.3") + implementation("com.github.ProjectMapK:Shared:0.4") // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.0") { diff --git a/src/main/kotlin/com/mapk/kmapper/KMapper.kt b/src/main/kotlin/com/mapk/kmapper/KMapper.kt index 4e79408..d22fd24 100644 --- a/src/main/kotlin/com/mapk/kmapper/KMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/KMapper.kt @@ -39,17 +39,6 @@ class KMapper private constructor( ParameterForMap.newInstance(it) } - private fun throwExceptionOnNotInitialized(argumentBucket: ArgumentBucket): Nothing { - val notInitializedIndexes = argumentBucket.notInitializedParameterIndexes - function.parameters - .filter { it.index in notInitializedIndexes } - .map { it.name } - .joinToString(", ") - .let { - throw IllegalArgumentException("Not passed arguments: $it") - } - } - private fun bindArguments(argumentBucket: ArgumentBucket, src: Any) { src::class.memberProperties.forEach outer@{ property -> // propertyが公開されていない場合は処理を行わない @@ -68,7 +57,7 @@ class KMapper private constructor( parameterMap[alias ?: property.name]?.let { // javaGetterを呼び出す方が高速 javaGetter.isAccessible = true - argumentBucket.setArgument(javaGetter.invoke(src)?.let { value -> mapObject(it, value) }, it.index) + argumentBucket.setArgument(it.param, javaGetter.invoke(src)?.let { value -> mapObject(it, value) }) // 終了判定 if (argumentBucket.isInitialized) return } @@ -79,7 +68,7 @@ class KMapper private constructor( src.forEach { (key, value) -> parameterMap[key]?.let { param -> // 取得した内容がnullでなければ適切にmapする - argumentBucket.setArgument(value?.let { mapObject(param, it) }, param.index) + argumentBucket.setArgument(param.param, value?.let { mapObject(param, it) }) // 終了判定 if (argumentBucket.isInitialized) return } @@ -88,12 +77,7 @@ class KMapper private constructor( private fun bindArguments(argumentBucket: ArgumentBucket, srcPair: Pair<*, *>) { parameterMap[srcPair.first.toString()]?.let { - argumentBucket.setArgument(srcPair.second?.let { value -> - mapObject( - it, - value - ) - }, it.index) + argumentBucket.setArgument(it.param, srcPair.second?.let { value -> mapObject(it, value) }) } } @@ -101,8 +85,6 @@ class KMapper private constructor( val bucket: ArgumentBucket = function.getArgumentBucket() bindArguments(bucket, srcMap) - if (!bucket.isInitialized) throwExceptionOnNotInitialized(bucket) - return function.call(bucket) } @@ -110,8 +92,6 @@ class KMapper private constructor( val bucket: ArgumentBucket = function.getArgumentBucket() bindArguments(bucket, srcPair) - if (!bucket.isInitialized) throwExceptionOnNotInitialized(bucket) - return function.call(bucket) } @@ -119,8 +99,6 @@ class KMapper private constructor( val bucket: ArgumentBucket = function.getArgumentBucket() bindArguments(bucket, src) - if (!bucket.isInitialized) throwExceptionOnNotInitialized(bucket) - return function.call(bucket) } @@ -135,8 +113,6 @@ class KMapper private constructor( } } - if (!bucket.isInitialized) throwExceptionOnNotInitialized(bucket) - return function.call(bucket) } } diff --git a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt index b355d8d..95cf97c 100644 --- a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt @@ -11,7 +11,7 @@ import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.staticFunctions import kotlin.reflect.jvm.isAccessible -internal class ParameterForMap private constructor(val index: Int, val clazz: KClass) { +internal class ParameterForMap private constructor(val param: KParameter, val clazz: KClass) { val javaClazz: Class by lazy { clazz.java } @@ -28,7 +28,7 @@ internal class ParameterForMap private constructor(val index: Int, val companion object { fun newInstance(param: KParameter): ParameterForMap<*> { - return ParameterForMap(param.index, param.type.classifier as KClass<*>) + return ParameterForMap(param, param.type.classifier as KClass<*>) } } }