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

Commit 125d976

Browse files
authored
Merge pull request #32 from k163377/feature
Response to commonization.
2 parents c3139c9 + 9d5f188 commit 125d976

File tree

2 files changed

+11
-15
lines changed

2 files changed

+11
-15
lines changed

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -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.12")
33+
api("com.github.ProjectMapK:Shared:0.13")
3434

3535
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
3636
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.2") {

src/main/kotlin/com/mapk/kmapper/ParameterUtils.kt

+10-14
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ import com.mapk.annotations.KConverter
44
import com.mapk.conversion.KConvertBy
55
import com.mapk.core.KFunctionWithInstance
66
import com.mapk.core.ValueParameter
7+
import com.mapk.core.getAnnotatedFunctions
8+
import com.mapk.core.getAnnotatedFunctionsFromCompanionObject
9+
import com.mapk.core.getKClass
710
import kotlin.reflect.KClass
811
import kotlin.reflect.KFunction
9-
import kotlin.reflect.full.companionObjectInstance
1012
import kotlin.reflect.full.findAnnotation
11-
import kotlin.reflect.full.functions
1213
import kotlin.reflect.full.isSubclassOf
1314
import kotlin.reflect.full.primaryConstructor
1415
import kotlin.reflect.full.staticFunctions
@@ -18,11 +19,11 @@ internal fun <T : Any> KClass<T>.getConverters(): Set<Pair<KClass<*>, KFunction<
1819
convertersFromConstructors(this) + convertersFromStaticMethods(this) + convertersFromCompanionObject(this)
1920

2021
private fun <T> Collection<KFunction<T>>.getConvertersFromFunctions(): Set<Pair<KClass<*>, KFunction<T>>> {
21-
return filter { it.annotations.any { annotation -> annotation is KConverter } }
22+
return this.getAnnotatedFunctions<KConverter, T>()
2223
.map { func ->
2324
func.isAccessible = true
2425

25-
(func.parameters.single().type.classifier as KClass<*>) to func
26+
func.parameters.single().getKClass() to func
2627
}.toSet()
2728
}
2829

@@ -39,17 +40,12 @@ private fun <T : Any> convertersFromStaticMethods(clazz: KClass<T>): Set<Pair<KC
3940

4041
@Suppress("UNCHECKED_CAST")
4142
private fun <T : Any> convertersFromCompanionObject(clazz: KClass<T>): Set<Pair<KClass<*>, KFunction<T>>> {
42-
return clazz.companionObjectInstance?.let { companionObject ->
43-
companionObject::class.functions
44-
.filter { it.annotations.any { annotation -> annotation is KConverter } }
45-
.map { function ->
46-
val func: KFunction<T> = KFunctionWithInstance(
47-
function,
48-
companionObject
49-
) as KFunction<T>
43+
return clazz.getAnnotatedFunctionsFromCompanionObject<KConverter>()?.let { (instance, functions) ->
44+
functions.map { function ->
45+
val func: KFunction<T> = KFunctionWithInstance(function, instance) as KFunction<T>
5046

51-
(func.parameters.single().type.classifier as KClass<*>) to func
52-
}.toSet()
47+
func.parameters.single().getKClass() to func
48+
}.toSet()
5349
} ?: emptySet()
5450
}
5551

0 commit comments

Comments
 (0)