From b3fba0fb67d3f288c107bab8ffb504f711256d93 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 4 Apr 2020 15:43:10 +0900 Subject: [PATCH 01/23] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=A2=E3=83=83=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a3e2259..7d2c579 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "com.mapk" -version = "0.19" +version = "0.20" java { sourceCompatibility = JavaVersion.VERSION_1_8 From 029b43e38ff1946713b2a1782213fc4b9ed1b672 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 4 Apr 2020 17:21:38 +0900 Subject: [PATCH 02/23] =?UTF-8?q?Converter=E3=81=AE=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E9=96=A2=E9=80=A3=E3=82=92util=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/ParameterForMap.kt | 42 ----------------- .../kotlin/com/mapk/kmapper/ParameterUtils.kt | 46 +++++++++++++++++++ 2 files changed, 46 insertions(+), 42 deletions(-) create mode 100644 src/main/kotlin/com/mapk/kmapper/ParameterUtils.kt diff --git a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt index eae4d15..71b9d5a 100644 --- a/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/ParameterForMap.kt @@ -1,15 +1,9 @@ package com.mapk.kmapper -import com.mapk.annotations.KConverter -import com.mapk.core.KFunctionWithInstance import kotlin.reflect.KClass import kotlin.reflect.KFunction import kotlin.reflect.KParameter -import kotlin.reflect.full.companionObjectInstance -import kotlin.reflect.full.functions import kotlin.reflect.full.isSubclassOf -import kotlin.reflect.full.staticFunctions -import kotlin.reflect.jvm.isAccessible internal class ParameterForMap private constructor(val param: KParameter, val clazz: KClass) { val javaClazz: Class by lazy { @@ -30,39 +24,3 @@ internal class ParameterForMap private constructor(val param: KParamete } } } - -private fun Collection>.getConverterMapFromFunctions(): Set, KFunction>> { - return filter { it.annotations.any { annotation -> annotation is KConverter } } - .map { func -> - func.isAccessible = true - - (func.parameters.single().type.classifier as KClass<*>) to func - }.toSet() -} - -private fun convertersFromConstructors(clazz: KClass): Set, KFunction>> { - return clazz.constructors.getConverterMapFromFunctions() -} - -@Suppress("UNCHECKED_CAST") -private fun convertersFromStaticMethods(clazz: KClass): Set, KFunction>> { - val staticFunctions: Collection> = clazz.staticFunctions as Collection> - - return staticFunctions.getConverterMapFromFunctions() -} - -@Suppress("UNCHECKED_CAST") -private fun convertersFromCompanionObject(clazz: KClass): Set, KFunction>> { - return clazz.companionObjectInstance?.let { companionObject -> - companionObject::class.functions - .filter { it.annotations.any { annotation -> annotation is KConverter } } - .map { function -> - val func: KFunction = KFunctionWithInstance( - function, - companionObject - ) as KFunction - - (func.parameters.single().type.classifier as KClass<*>) to func - }.toSet() - } ?: emptySet() -} diff --git a/src/main/kotlin/com/mapk/kmapper/ParameterUtils.kt b/src/main/kotlin/com/mapk/kmapper/ParameterUtils.kt new file mode 100644 index 0000000..4e7dcb7 --- /dev/null +++ b/src/main/kotlin/com/mapk/kmapper/ParameterUtils.kt @@ -0,0 +1,46 @@ +package com.mapk.kmapper + +import com.mapk.annotations.KConverter +import com.mapk.core.KFunctionWithInstance +import kotlin.reflect.KClass +import kotlin.reflect.KFunction +import kotlin.reflect.full.companionObjectInstance +import kotlin.reflect.full.functions +import kotlin.reflect.full.staticFunctions +import kotlin.reflect.jvm.isAccessible + +internal fun Collection>.getConverterMapFromFunctions(): Set, KFunction>> { + return filter { it.annotations.any { annotation -> annotation is KConverter } } + .map { func -> + func.isAccessible = true + + (func.parameters.single().type.classifier as KClass<*>) to func + }.toSet() +} + +internal fun convertersFromConstructors(clazz: KClass): Set, KFunction>> { + return clazz.constructors.getConverterMapFromFunctions() +} + +@Suppress("UNCHECKED_CAST") +internal fun convertersFromStaticMethods(clazz: KClass): Set, KFunction>> { + val staticFunctions: Collection> = clazz.staticFunctions as Collection> + + return staticFunctions.getConverterMapFromFunctions() +} + +@Suppress("UNCHECKED_CAST") +internal fun convertersFromCompanionObject(clazz: KClass): Set, KFunction>> { + return clazz.companionObjectInstance?.let { companionObject -> + companionObject::class.functions + .filter { it.annotations.any { annotation -> annotation is KConverter } } + .map { function -> + val func: KFunction = KFunctionWithInstance( + function, + companionObject + ) as KFunction + + (func.parameters.single().type.classifier as KClass<*>) to func + }.toSet() + } ?: emptySet() +} From efbb2c122f0905d7366408cf0b860df2f16eb947 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 03:34:07 +0900 Subject: [PATCH 03/23] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?= =?UTF-8?q?=E3=81=9A=E5=8B=95=E3=81=8F=E3=81=A8=E3=81=93=E3=82=8D=E3=81=BE?= =?UTF-8?q?=E3=81=A7=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/BoundKMapper.kt | 60 +++++++++++++++++++ .../com/mapk/kmapper/BoundParameterForMap.kt | 23 +++++++ 2 files changed, 83 insertions(+) create mode 100644 src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt create mode 100644 src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt diff --git a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt new file mode 100644 index 0000000..df66552 --- /dev/null +++ b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt @@ -0,0 +1,60 @@ +package com.mapk.kmapper + +import com.mapk.annotations.KGetterAlias +import com.mapk.annotations.KGetterIgnore +import com.mapk.core.ArgumentBucket +import com.mapk.core.KFunctionForCall +import com.mapk.core.getAliasOrName +import java.lang.IllegalArgumentException +import kotlin.reflect.KClass +import kotlin.reflect.KFunction +import kotlin.reflect.KProperty1 +import kotlin.reflect.KVisibility +import kotlin.reflect.full.findAnnotation +import kotlin.reflect.full.memberProperties +import kotlin.reflect.jvm.jvmName + +class BoundKMapper private constructor( + private val function: KFunctionForCall, + src: KClass, + parameterNameConverter: (String) -> String = { it } +) { + constructor(function: KFunction, src: KClass, propertyNameConverter: (String) -> String = { it }) : this( + KFunctionForCall(function), src, propertyNameConverter + ) + + private val parameters: List> + + init { + val srcPropertiesMap: Map> = + src.memberProperties + .filter { + // アクセス可能かつignoreされてないもののみ抽出 + !(it.visibility != KVisibility.PUBLIC) && + it.getter.annotations.none { annotation -> annotation is KGetterIgnore } + }.associateBy { it.getter.findAnnotation()?.value ?: it.name } + + parameters = function.parameters.mapNotNull { + val temp = srcPropertiesMap[parameterNameConverter(it.getAliasOrName()!!)]?.let { property -> + BoundParameterForMap(it, property) + } + + // 必須引数に対応するプロパティがsrcに定義されていない場合エラー + if (temp == null && !it.isOptional) { + throw IllegalArgumentException("Property ${it.name!!} is not declared in ${src.jvmName}.") + } + + temp + } + } + + fun map(src: S): D { + val bucket: ArgumentBucket = function.getArgumentBucket() + + parameters.forEach { + bucket.putIfAbsent(it.param, it.map(src)) + } + + return function.call(bucket) + } +} diff --git a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt new file mode 100644 index 0000000..0e7b50c --- /dev/null +++ b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt @@ -0,0 +1,23 @@ +package com.mapk.kmapper + +import java.lang.IllegalArgumentException +import kotlin.reflect.KParameter +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.javaGetter + +@Suppress("UNCHECKED_CAST") +internal class BoundParameterForMap(val param: KParameter, property: KProperty1) { + val map: (S) -> Any? + + init { + // ゲッターが無いならエラー + val propertyGetter = property.javaGetter + ?: throw IllegalArgumentException("${property.name} does not have getter.") + propertyGetter.isAccessible = true + + // TODO: コンバータその他への対応 + map = { + propertyGetter.invoke(it) + } + } +} From 2576baf9a4579e179ab303e46a5cb4c07b5e4d95 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 03:34:29 +0900 Subject: [PATCH 04/23] =?UTF-8?q?BoundKMapper=E3=81=AE=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E3=81=AA=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/SimpleKMapperTest.kt | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt index 7baebab..9f384fb 100644 --- a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt @@ -50,7 +50,7 @@ class SimpleDstExt( } } -private data class Src1( +data class Src1( val arg2: String? ) { val arg1: Int = arg2?.length ?: 0 @@ -196,4 +196,40 @@ class SimpleKMapperTest { } } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Nested + @DisplayName("インスタンスからマップ") + inner class FromInstance { + private val mapper = BoundKMapper(::SimpleDst, Src1::class) + + @Test + @DisplayName("Nullを含まない場合") + fun testWithoutNull() { + val stringValue = "value" + + val src = Src1(stringValue) + + val dst = mapper.map(src) + + assertEquals(stringValue.length, dst.arg1) + assertEquals(stringValue, dst.arg2) + assertEquals(stringValue.length.toByte(), dst.arg3) + } + + @Test + @DisplayName("Nullを含む場合") + fun testContainsNull() { + val src = Src1(null) + + val dst = mapper.map(src) + + assertEquals(0, dst.arg1) + assertEquals(null, dst.arg2) + assertEquals(0.toByte(), dst.arg3) + } + } + } } From 78dfa22b021c4d2d0067e0fba272e2dad86cb789 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 06:38:21 +0900 Subject: [PATCH 05/23] =?UTF-8?q?Enum/String=E3=81=B8=E3=81=AE=E5=A4=89?= =?UTF-8?q?=E6=8F=9B=E3=81=BE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/BoundParameterForMap.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt index 0e7b50c..9b673f8 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt @@ -1,8 +1,11 @@ package com.mapk.kmapper +import com.mapk.core.EnumMapper import java.lang.IllegalArgumentException +import kotlin.reflect.KClass import kotlin.reflect.KParameter import kotlin.reflect.KProperty1 +import kotlin.reflect.full.isSubclassOf import kotlin.reflect.jvm.javaGetter @Suppress("UNCHECKED_CAST") @@ -15,9 +18,17 @@ internal class BoundParameterForMap(val param: KParameter, property: KP ?: throw IllegalArgumentException("${property.name} does not have getter.") propertyGetter.isAccessible = true - // TODO: コンバータその他への対応 - map = { - propertyGetter.invoke(it) + val paramClazz = param.type.classifier as KClass<*> + val propertyClazz = property.returnType.classifier as KClass<*> + + // TODO: コンバータへの対応 + map = when { + paramClazz.isSubclassOf(propertyClazz) -> { { propertyGetter.invoke(it) } } + paramClazz.java.isEnum && propertyClazz == String::class -> { { + EnumMapper.getEnum(paramClazz.java, it as String) + } } + propertyClazz == String::class -> { { it.toString() } } + else -> throw IllegalArgumentException("Can not convert $propertyClazz to $paramClazz") } } } From 2c3dac981eae519e7d1fca1cd5734c92248cd119 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 07:20:18 +0900 Subject: [PATCH 06/23] =?UTF-8?q?BoundKMapper=E3=81=AE=E3=83=87=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4=E5=AF=BE=E5=BF=9C=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/DefaultArgumentTest.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/com/mapk/kmapper/DefaultArgumentTest.kt b/src/test/kotlin/com/mapk/kmapper/DefaultArgumentTest.kt index bcf088e..91a8188 100644 --- a/src/test/kotlin/com/mapk/kmapper/DefaultArgumentTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/DefaultArgumentTest.kt @@ -11,15 +11,25 @@ class DefaultArgumentTest { data class Dst(val fooArgument: Int, @param:KUseDefaultArgument val barArgument: String = "default") data class Src(val fooArgument: Int, val barArgument: String) + private val src = Src(1, "src") + @Nested @DisplayName("KMapper") inner class KMapperTest { @Test fun test() { - val src = Src(1, "src") - val result = KMapper(::Dst).map(src) assertEquals(Dst(1, "default"), result) } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + fun test() { + val result = BoundKMapper(::Dst, Src::class).map(src) + assertEquals(Dst(1, "default"), result) + } + } } From b093653bd1f6f2d24233ecfe17ec4d2e7d71645c Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 07:20:37 +0900 Subject: [PATCH 07/23] =?UTF-8?q?=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=88=E5=80=A4=E5=88=A9=E7=94=A8=E3=81=AE=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E6=BC=8F=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/BoundKMapper.kt | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt index df66552..90aa6bb 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt @@ -5,9 +5,11 @@ import com.mapk.annotations.KGetterIgnore import com.mapk.core.ArgumentBucket import com.mapk.core.KFunctionForCall import com.mapk.core.getAliasOrName +import com.mapk.core.isUseDefaultArgument import java.lang.IllegalArgumentException import kotlin.reflect.KClass import kotlin.reflect.KFunction +import kotlin.reflect.KParameter import kotlin.reflect.KProperty1 import kotlin.reflect.KVisibility import kotlin.reflect.full.findAnnotation @@ -34,18 +36,20 @@ class BoundKMapper private constructor( it.getter.annotations.none { annotation -> annotation is KGetterIgnore } }.associateBy { it.getter.findAnnotation()?.value ?: it.name } - parameters = function.parameters.mapNotNull { - val temp = srcPropertiesMap[parameterNameConverter(it.getAliasOrName()!!)]?.let { property -> - BoundParameterForMap(it, property) - } + parameters = function.parameters + .filter { it.kind != KParameter.Kind.INSTANCE && !it.isUseDefaultArgument() } + .mapNotNull { + val temp = srcPropertiesMap[parameterNameConverter(it.getAliasOrName()!!)]?.let { property -> + BoundParameterForMap(it, property) + } - // 必須引数に対応するプロパティがsrcに定義されていない場合エラー - if (temp == null && !it.isOptional) { - throw IllegalArgumentException("Property ${it.name!!} is not declared in ${src.jvmName}.") - } + // 必須引数に対応するプロパティがsrcに定義されていない場合エラー + if (temp == null && !it.isOptional) { + throw IllegalArgumentException("Property ${it.name!!} is not declared in ${src.jvmName}.") + } - temp - } + temp + } } fun map(src: S): D { From 541faaf8a6a534a6f4b2d14227386f430462e0c9 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 07:30:10 +0900 Subject: [PATCH 08/23] =?UTF-8?q?BoundKMapper=E3=81=AEEnum=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=94=E3=83=B3=E3=82=B0=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/EnumMappingTest.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/EnumMappingTest.kt b/src/test/kotlin/com/mapk/kmapper/EnumMappingTest.kt index 544d6ce..0caa6cc 100644 --- a/src/test/kotlin/com/mapk/kmapper/EnumMappingTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/EnumMappingTest.kt @@ -29,4 +29,20 @@ class EnumMappingTest { assertEquals(language, result.language) } } + + data class BoundSrc(val language: String) + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + private val mapper = BoundKMapper(::EnumMappingDst, BoundSrc::class) + + @ParameterizedTest(name = "Non-Null要求") + @EnumSource(value = JvmLanguage::class) + fun test(language: JvmLanguage) { + val result = mapper.map(BoundSrc(language.name)) + + assertEquals(language, result.language) + } + } } From 16f9e19a4d09b886af1fdbf49a3f425c724a9961 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 07:30:20 +0900 Subject: [PATCH 09/23] =?UTF-8?q?invoke=E3=81=97=E5=BF=98=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E3=81=9F=E3=82=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt index 9b673f8..bc7ccc7 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt @@ -25,9 +25,9 @@ internal class BoundParameterForMap(val param: KParameter, property: KP map = when { paramClazz.isSubclassOf(propertyClazz) -> { { propertyGetter.invoke(it) } } paramClazz.java.isEnum && propertyClazz == String::class -> { { - EnumMapper.getEnum(paramClazz.java, it as String) + EnumMapper.getEnum(paramClazz.java, propertyGetter.invoke(it) as String) } } - propertyClazz == String::class -> { { it.toString() } } + propertyClazz == String::class -> { { propertyGetter.invoke(it).toString() } } else -> throw IllegalArgumentException("Can not convert $propertyClazz to $paramClazz") } } From f6297e45d336c6d831baae486a4d04b08e2153bf Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:34:45 +0900 Subject: [PATCH 10/23] =?UTF-8?q?BoundKMapper=E3=81=A7KGetterIgnore?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/KGetterIgnoreTest.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/KGetterIgnoreTest.kt b/src/test/kotlin/com/mapk/kmapper/KGetterIgnoreTest.kt index 6010131..ecc51b2 100644 --- a/src/test/kotlin/com/mapk/kmapper/KGetterIgnoreTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/KGetterIgnoreTest.kt @@ -31,4 +31,21 @@ class KGetterIgnoreTest { assertEquals(Dst(1, "2-1", 32, "4"), dst1) } } + + data class BoundSrc(val arg1: Int, val arg2: Short, @get:KGetterIgnore val arg3: String) + data class BoundDst(val arg1: Int, val arg2: Short, val arg3: String = "default") + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + @DisplayName("フィールドを無視するテスト") + fun test() { + val mapper = BoundKMapper(::BoundDst, BoundSrc::class) + + val result = mapper.map(BoundSrc(1, 2, "arg3")) + + assertEquals(BoundDst(1, 2, "default"), result) + } + } } From d64e2eec7e97209dd05540a0db3e199707692d59 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:41:25 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=E7=84=A1=E9=A7=84=E3=81=AB=E5=A4=A7?= =?UTF-8?q?=E3=81=8D=E3=81=8B=E3=81=A3=E3=81=9F=E3=82=A4=E3=83=B3=E3=83=87?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt index 1afb194..1f9ef40 100644 --- a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt @@ -20,10 +20,7 @@ class ParameterNameConverterTest { val src = mapOf("camel_case" to expected) val mapper = KMapper(CamelCaseDst::class) { - CaseFormat.LOWER_CAMEL.to( - CaseFormat.LOWER_UNDERSCORE, - it - ) + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, it) } val result = mapper.map(src) From 7df7967aa064a15aace51601252c44e52fab4c84 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:42:04 +0900 Subject: [PATCH 12/23] =?UTF-8?q?data=20class=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt index 1f9ef40..fb13b69 100644 --- a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt @@ -6,7 +6,7 @@ import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test -private class CamelCaseDst(val camelCase: String) +private data class CamelCaseDst(val camelCase: String) @DisplayName("パラメータ名変換のテスト") class ParameterNameConverterTest { From 6af91e6d185d2c97ab943ad6a46d5ad729d3ebe2 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:42:37 +0900 Subject: [PATCH 13/23] =?UTF-8?q?BoundKMapper=E3=81=A7=E3=83=91=E3=83=A9?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=E5=90=8D=E5=A4=89=E6=8F=9B=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapk/kmapper/ParameterNameConverterTest.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt index fb13b69..5a8ce90 100644 --- a/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/ParameterNameConverterTest.kt @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test private data class CamelCaseDst(val camelCase: String) +private data class BoundSrc(val camel_case: String) @DisplayName("パラメータ名変換のテスト") class ParameterNameConverterTest { @@ -27,4 +28,20 @@ class ParameterNameConverterTest { assertEquals(expected, result.camelCase) } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + @DisplayName("スネークケースsrc -> キャメルケースdst") + fun test() { + + val mapper = BoundKMapper(::CamelCaseDst, BoundSrc::class) { + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, it) + } + val result = mapper.map(BoundSrc("snakeCase")) + + assertEquals(CamelCaseDst("snakeCase"), result) + } + } } From 41cbae66178692a651afafae78fa3a5418b4a725 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:47:37 +0900 Subject: [PATCH 14/23] =?UTF-8?q?BoundKMapper=E3=81=A7=E3=83=91=E3=83=A9?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=E5=90=8D=E3=81=A8=E3=82=B2=E3=83=83?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=81=9D=E3=82=8C=E3=81=9E=E3=82=8C=E3=81=AB?= =?UTF-8?q?=E3=82=A8=E3=82=A4=E3=83=AA=E3=82=A2=E3=82=B9=E3=82=92=E8=B2=BC?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/PropertyAliasTest.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/PropertyAliasTest.kt b/src/test/kotlin/com/mapk/kmapper/PropertyAliasTest.kt index 409f935..1847dec 100644 --- a/src/test/kotlin/com/mapk/kmapper/PropertyAliasTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/PropertyAliasTest.kt @@ -48,4 +48,18 @@ class PropertyAliasTest { assertEquals(2, result.arg2) } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + @DisplayName("パラメータとゲッターそれぞれエイリアス有りでのマッピング") + fun test() { + val mapper = BoundKMapper(::AliasedDst, AliasedSrc::class) + + val result = mapper.map(AliasedSrc(2.2, 100)) + + assertEquals(AliasedDst(2.2, 100), result) + } + } } From c0afef5b8429b25f45a24b1915a77a416bae1b93 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 14:50:12 +0900 Subject: [PATCH 15/23] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt b/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt index 46a179c..e414b61 100644 --- a/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt @@ -10,7 +10,7 @@ private data class StringMappingDst(val value: String) @DisplayName("文字列に対してtoStringしたものを渡すテスト") class StringMappingTest { @Nested - @DisplayName("KMapperの場合") + @DisplayName("KMapper") inner class KMapperTest { @Test fun test() { From 18b16ba4aaf4899c6ecdfcdaa3e07c86bbee985a Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 15:00:01 +0900 Subject: [PATCH 16/23] =?UTF-8?q?BoundKMapper=E3=81=A7=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E3=81=AB=E5=AF=BE=E3=81=97=E3=81=A6toString=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=82=82=E3=81=AE=E3=82=92=E6=B8=A1=E3=81=99=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt b/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt index e414b61..60ea9d8 100644 --- a/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/StringMappingTest.kt @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test private data class StringMappingDst(val value: String) +private data class BoundMappingSrc(val value: Int) @DisplayName("文字列に対してtoStringしたものを渡すテスト") class StringMappingTest { @@ -18,4 +19,14 @@ class StringMappingTest { assertEquals("1", result.value) } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + fun test() { + val result = BoundKMapper(::StringMappingDst, BoundMappingSrc::class).map(BoundMappingSrc(100)) + assertEquals("100", result.value) + } + } } From 6cbcfca116bf0184384e9c3f1ac5e900473b4954 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 15:21:36 +0900 Subject: [PATCH 17/23] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E3=82=B5=E3=83=9D=E3=83=BC=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/mapk/kmapper/BoundParameterForMap.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt index bc7ccc7..848ad40 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt @@ -21,8 +21,18 @@ internal class BoundParameterForMap(val param: KParameter, property: KP val paramClazz = param.type.classifier as KClass<*> val propertyClazz = property.returnType.classifier as KClass<*> - // TODO: コンバータへの対応 + val converter = (convertersFromConstructors(paramClazz) + + convertersFromStaticMethods(paramClazz) + + convertersFromCompanionObject(paramClazz)) + .filter { (key, _) -> propertyClazz.isSubclassOf(key) } + .let { + if (1 < it.size) throw IllegalArgumentException("${param.name} has multiple converter. $it") + + it.singleOrNull()?.second + } + map = when { + converter != null -> { { converter.call(propertyGetter.invoke(it)) } } paramClazz.isSubclassOf(propertyClazz) -> { { propertyGetter.invoke(it) } } paramClazz.java.isEnum && propertyClazz == String::class -> { { EnumMapper.getEnum(paramClazz.java, propertyGetter.invoke(it) as String) From 2332a7dc75653fc788011691a1b8067de1b5bf24 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 15:21:57 +0900 Subject: [PATCH 18/23] =?UTF-8?q?BoundKMapper=E3=81=A7=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=90=E3=83=BC=E3=82=BF=E3=83=BC=E5=88=A9=E7=94=A8?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/ConverterKMapperTest.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/test/kotlin/com/mapk/kmapper/ConverterKMapperTest.kt b/src/test/kotlin/com/mapk/kmapper/ConverterKMapperTest.kt index 9fe4d50..246a650 100644 --- a/src/test/kotlin/com/mapk/kmapper/ConverterKMapperTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/ConverterKMapperTest.kt @@ -25,6 +25,10 @@ class CompanionConverter private constructor(val arg: String) { private data class StaticMethodConverterDst(val argument: StaticMethodConverter) +private data class BoundConstructorConverterSrc(val argument: Int) +private data class BoundCompanionConverterSrc(val argument: String) +private data class BoundStaticMethodConverterSrc(val argument: String) + @DisplayName("コンバータ有りでのマッピングテスト") class ConverterKMapperTest { @Nested @@ -57,4 +61,35 @@ class ConverterKMapperTest { assertTrue(intArrayOf(1, 2, 3) contentEquals result.argument.arg) } } + + @Nested + @DisplayName("BoundKMapper") + inner class BoundKMapperTest { + @Test + @DisplayName("コンストラクターでのコンバートテスト") + fun constructorConverterTest() { + val mapper = BoundKMapper(::ConstructorConverterDst, BoundConstructorConverterSrc::class) + val result = mapper.map(BoundConstructorConverterSrc(1)) + + assertEquals(ConstructorConverter(1), result.argument) + } + + @Test + @DisplayName("コンパニオンオブジェクトに定義したコンバータでのコンバートテスト") + fun companionConverterTest() { + val mapper = BoundKMapper(::CompanionConverterDst, BoundCompanionConverterSrc::class) + val result = mapper.map(BoundCompanionConverterSrc("arg")) + + assertEquals("arg", result.argument.arg) + } + + @Test + @DisplayName("スタティックメソッドに定義したコンバータでのコンバートテスト") + fun staticMethodConverterTest() { + val mapper = BoundKMapper(::StaticMethodConverterDst, BoundStaticMethodConverterSrc::class) + val result = mapper.map(BoundStaticMethodConverterSrc("1,2,3")) + + assertTrue(intArrayOf(1, 2, 3) contentEquals result.argument.arg) + } + } } From 02d88d10515c50808e866f65b32b95a0c111a216 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 15:50:06 +0900 Subject: [PATCH 19/23] =?UTF-8?q?property=E3=81=AE=E3=81=BE=E3=81=BE?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt index 90aa6bb..1f53036 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt @@ -21,8 +21,8 @@ class BoundKMapper private constructor( src: KClass, parameterNameConverter: (String) -> String = { it } ) { - constructor(function: KFunction, src: KClass, propertyNameConverter: (String) -> String = { it }) : this( - KFunctionForCall(function), src, propertyNameConverter + constructor(function: KFunction, src: KClass, parameterNameConverter: (String) -> String = { it }) : this( + KFunctionForCall(function), src, parameterNameConverter ) private val parameters: List> From 3db4c67a2d79de25a97d621091dc42a16e51d60c Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 15:52:15 +0900 Subject: [PATCH 20/23] =?UTF-8?q?class=E3=81=8B=E3=82=89=E3=81=AE=E5=AE=A3?= =?UTF-8?q?=E8=A8=80=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt index 1f53036..d487b30 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundKMapper.kt @@ -6,6 +6,7 @@ import com.mapk.core.ArgumentBucket import com.mapk.core.KFunctionForCall import com.mapk.core.getAliasOrName import com.mapk.core.isUseDefaultArgument +import com.mapk.core.toKConstructor import java.lang.IllegalArgumentException import kotlin.reflect.KClass import kotlin.reflect.KFunction @@ -16,7 +17,7 @@ import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.memberProperties import kotlin.reflect.jvm.jvmName -class BoundKMapper private constructor( +class BoundKMapper private constructor( private val function: KFunctionForCall, src: KClass, parameterNameConverter: (String) -> String = { it } @@ -25,6 +26,10 @@ class BoundKMapper private constructor( KFunctionForCall(function), src, parameterNameConverter ) + constructor(clazz: KClass, src: KClass, parameterNameConverter: (String) -> String = { it }) : this( + clazz.toKConstructor(), src, parameterNameConverter + ) + private val parameters: List> init { From 1c2b33b2bea1fa58888c420092bf9e30b7950e92 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 16:08:54 +0900 Subject: [PATCH 21/23] =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=92=E3=83=91=E3=83=A9=E3=83=A1=E3=82=BF=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E3=83=86=E3=82=B9=E3=83=88=E3=81=A7=E9=A0=86=E6=AC=A1?= =?UTF-8?q?=E4=B8=8E=E3=81=88=E3=82=8B=E6=96=B9=E5=BC=8F=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mapk/kmapper/SimpleKMapperTest.kt | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt index 9f384fb..fce5d30 100644 --- a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt @@ -4,11 +4,17 @@ package com.mapk.kmapper import com.mapk.annotations.KConstructor import java.math.BigInteger +import java.util.stream.Stream import kotlin.reflect.full.isSubclassOf import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.Arguments.arguments +import org.junit.jupiter.params.provider.MethodSource open class SimpleDst( val arg1: Int, @@ -199,15 +205,20 @@ class SimpleKMapperTest { @Nested @DisplayName("BoundKMapper") + @TestInstance(TestInstance.Lifecycle.PER_CLASS) inner class BoundKMapperTest { @Nested @DisplayName("インスタンスからマップ") + @TestInstance(TestInstance.Lifecycle.PER_CLASS) inner class FromInstance { - private val mapper = BoundKMapper(::SimpleDst, Src1::class) - - @Test - @DisplayName("Nullを含まない場合") - fun testWithoutNull() { + fun boundKMapperProvider(): Stream = Stream.of( + arguments("from method reference", BoundKMapper(::SimpleDst, Src1::class)), + arguments("from class", BoundKMapper(SimpleDst::class, Src1::class)) + ) + + @ParameterizedTest(name = "Nullを含まない場合") + @MethodSource("boundKMapperProvider") + fun testWithoutNull(name: String, mapper: BoundKMapper) { val stringValue = "value" val src = Src1(stringValue) @@ -219,9 +230,9 @@ class SimpleKMapperTest { assertEquals(stringValue.length.toByte(), dst.arg3) } - @Test - @DisplayName("Nullを含む場合") - fun testContainsNull() { + @ParameterizedTest(name = "Nullを含む場合") + @MethodSource("boundKMapperProvider") + fun testContainsNull(name: String, mapper: BoundKMapper) { val src = Src1(null) val dst = mapper.map(src) From 8a008addac7494806ef4339354c3d7bc9229d4f7 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 16:14:28 +0900 Subject: [PATCH 22/23] =?UTF-8?q?unused=E8=AD=A6=E5=91=8A=E3=82=92?= =?UTF-8?q?=E6=8A=91=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt index fce5d30..bbfa682 100644 --- a/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt +++ b/src/test/kotlin/com/mapk/kmapper/SimpleKMapperTest.kt @@ -218,7 +218,10 @@ class SimpleKMapperTest { @ParameterizedTest(name = "Nullを含まない場合") @MethodSource("boundKMapperProvider") - fun testWithoutNull(name: String, mapper: BoundKMapper) { + fun testWithoutNull( + @Suppress("UNUSED_PARAMETER") name: String, + mapper: BoundKMapper + ) { val stringValue = "value" val src = Src1(stringValue) @@ -232,7 +235,10 @@ class SimpleKMapperTest { @ParameterizedTest(name = "Nullを含む場合") @MethodSource("boundKMapperProvider") - fun testContainsNull(name: String, mapper: BoundKMapper) { + fun testContainsNull( + @Suppress("UNUSED_PARAMETER") name: String, + mapper: BoundKMapper + ) { val src = Src1(null) val dst = mapper.map(src) From 53b8324409060a8f10c5ef10a4b5a12a45056627 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 5 Apr 2020 16:14:59 +0900 Subject: [PATCH 23/23] =?UTF-8?q?param=E3=81=A8property=E3=82=92=E9=96=93?= =?UTF-8?q?=E9=81=95=E3=81=88=E3=81=A6=E3=81=8A=E3=82=8A=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E3=81=AB=E6=96=87=E5=AD=97=E5=88=97=E3=81=B8=E3=81=AE=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=94=E3=83=B3=E3=82=B0=E3=81=8C=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=9F?= =?UTF-8?q?=E3=82=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt index 848ad40..e61d775 100644 --- a/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt +++ b/src/main/kotlin/com/mapk/kmapper/BoundParameterForMap.kt @@ -37,7 +37,7 @@ internal class BoundParameterForMap(val param: KParameter, property: KP paramClazz.java.isEnum && propertyClazz == String::class -> { { EnumMapper.getEnum(paramClazz.java, propertyGetter.invoke(it) as String) } } - propertyClazz == String::class -> { { propertyGetter.invoke(it).toString() } } + paramClazz == String::class -> { { propertyGetter.invoke(it).toString() } } else -> throw IllegalArgumentException("Can not convert $propertyClazz to $paramClazz") } }