Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit 4f5f86f

Browse files
authored
Merge pull request #19 from k163377/feature
Fixing generics and keeping up with Shared updates.
2 parents 7803888 + 0143685 commit 4f5f86f

File tree

4 files changed

+23
-31
lines changed

4 files changed

+23
-31
lines changed

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "com.mapk"
9-
version = "0.13"
9+
version = "0.14"
1010

1111
java {
1212
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -30,7 +30,7 @@ repositories {
3030
dependencies {
3131
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
3232
implementation(kotlin("reflect"))
33-
api("com.github.ProjectMapK:Shared:0.15")
33+
api("com.github.ProjectMapK:Shared:0.16")
3434
// 使うのはRowMapperのみなため他はexclude、またバージョンそのものは使う相手に合わせるためcompileOnly
3535
compileOnly(group = "org.springframework", name = "spring-jdbc", version = "5.2.4.RELEASE") {
3636
exclude(module = "spring-beans")
@@ -43,7 +43,7 @@ dependencies {
4343
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
4444
}
4545
// https://mvnrepository.com/artifact/io.mockk/mockk
46-
testImplementation("io.mockk:mockk:1.9.3")
46+
testImplementation("io.mockk:mockk:1.10.0")
4747

4848
// テスト時には無いと困るため、別口でimplementation
4949
testImplementation(group = "org.springframework", name = "spring-jdbc", version = "5.2.4.RELEASE")

src/main/kotlin/com/mapk/deserialization/KColumnDeserialize.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import kotlin.reflect.KClass
77
@MustBeDocumented
88
annotation class KColumnDeserializeBy(val deserializer: KClass<out AbstractKColumnDeserializer<*, *, *>>)
99

10-
abstract class AbstractKColumnDeserializer<A : Annotation, S : Any, D : Any>(protected val annotation: A) {
10+
abstract class AbstractKColumnDeserializer<A : Annotation, S : Any, D>(protected val annotation: A) {
1111
abstract val srcClass: Class<S>
1212
abstract fun deserialize(source: S?): D?
1313
}

src/main/kotlin/com/mapk/krowmapper/KRowMapper.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,17 @@ import kotlin.reflect.KClass
77
import kotlin.reflect.KFunction
88
import org.springframework.jdbc.core.RowMapper
99

10-
class KRowMapper<T : Any> private constructor(
11-
private val function: KFunctionForCall<T>
12-
) : RowMapper<T> {
13-
constructor(function: KFunction<T>, parameterNameConverter: (String) -> String = { it }) : this(
10+
class KRowMapper<T : Any> private constructor(private val function: KFunctionForCall<T>) : RowMapper<T> {
11+
constructor(function: KFunction<T>, parameterNameConverter: ((String) -> String)? = null) : this(
1412
KFunctionForCall(function, parameterNameConverter)
1513
)
1614

17-
constructor(clazz: KClass<T>, parameterNameConverter: (String) -> String = { it }) : this(
15+
constructor(clazz: KClass<T>, parameterNameConverter: ((String) -> String)? = null) : this(
1816
clazz.toKConstructor(parameterNameConverter)
1917
)
2018

21-
private val parameters: List<ParameterForMap> = function.requiredParameters.map { ParameterForMap.newInstance(it) }
19+
private val parameters: List<ParameterForMap<*, *>> =
20+
function.requiredParameters.map { ParameterForMap.newInstance(it) }
2221

2322
override fun mapRow(rs: ResultSet, rowNum: Int): T {
2423
val adaptor = function.getArgumentAdaptor()

src/main/kotlin/com/mapk/krowmapper/ParameterForMap.kt

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,33 @@ import kotlin.reflect.full.staticFunctions
1919
import kotlin.reflect.jvm.isAccessible
2020
import kotlin.reflect.jvm.jvmName
2121

22-
internal sealed class ParameterForMap {
22+
internal sealed class ParameterForMap<S, D> {
2323
abstract val name: String
24-
abstract val clazz: Class<*>
25-
abstract fun getObject(rs: ResultSet): Any?
24+
abstract fun getObject(rs: ResultSet): D?
2625

27-
private class Plain(
28-
override val name: String,
29-
override val clazz: Class<*>
30-
) : ParameterForMap() {
31-
override fun getObject(rs: ResultSet): Any? = rs.getObject(name, clazz)
26+
private class Plain<T>(override val name: String, val requiredClazz: Class<T>) : ParameterForMap<T, T>() {
27+
override fun getObject(rs: ResultSet): T? = rs.getObject(name, requiredClazz)
3228
}
3329

34-
private class Enum(
35-
override val name: String,
36-
override val clazz: Class<*>
37-
) : ParameterForMap() {
38-
override fun getObject(rs: ResultSet): Any? = EnumMapper.getEnum(clazz, rs.getString(name))
30+
private class Enum<D>(override val name: String, val enumClazz: Class<D>) : ParameterForMap<String, D>() {
31+
override fun getObject(rs: ResultSet): D? = EnumMapper.getEnum(enumClazz, rs.getString(name))
3932
}
4033

41-
private class Deserializer(
34+
private class Deserializer<S : Any, D>(
4235
override val name: String,
43-
override val clazz: Class<*>,
44-
private val deserializer: KFunction<*>
45-
) : ParameterForMap() {
36+
val srcClazz: Class<S>,
37+
private val deserializer: KFunction<D?>
38+
) : ParameterForMap<S, D>() {
4639
constructor(
4740
name: String,
48-
deserializer: AbstractKColumnDeserializer<*, *, *>
41+
deserializer: AbstractKColumnDeserializer<*, S, D>
4942
) : this(name, deserializer.srcClass, deserializer::deserialize)
5043

51-
override fun getObject(rs: ResultSet): Any? = deserializer.call(rs.getObject(name, clazz))
44+
override fun getObject(rs: ResultSet): D? = deserializer.call(rs.getObject(name, srcClazz))
5245
}
5346

5447
companion object {
55-
fun <T : Any> newInstance(param: ValueParameter<T>): ParameterForMap {
48+
fun <T : Any> newInstance(param: ValueParameter<T>): ParameterForMap<*, T> {
5649
param.getDeserializer()?.let {
5750
return Deserializer(param.name, it)
5851
}
@@ -117,5 +110,5 @@ private fun <T : Any> deserializerFromCompanionObject(clazz: KClass<T>): Collect
117110
functions.map {
118111
KFunctionWithInstance(it, instance) as KFunction<T>
119112
}
120-
} ?: emptySet()
113+
} ?: emptyList()
121114
}

0 commit comments

Comments
 (0)