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

Commit d4c4c54

Browse files
committed
定義場所の間違いを修正
合わせてinternal化
1 parent 16e6cf9 commit d4c4c54

File tree

3 files changed

+28
-24
lines changed

3 files changed

+28
-24
lines changed
Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package com.mapk.core
22

3-
import com.mapk.annotations.KConstructor
43
import kotlin.reflect.KClass
54
import kotlin.reflect.KFunction
65
import kotlin.reflect.KParameter
76
import kotlin.reflect.full.companionObject
87
import kotlin.reflect.full.functions
9-
import kotlin.reflect.full.primaryConstructor
10-
import kotlin.reflect.jvm.jvmName
118

129
inline fun <reified A : Annotation> KClass<*>.getAnnotatedFunctionsFromCompanionObject(): Pair<Any, List<KFunction<*>>>? {
1310
return this.companionObject?.let { companionObject ->
@@ -26,25 +23,4 @@ inline fun <reified A : Annotation, T> Collection<KFunction<T>>.getAnnotatedFunc
2623
return filter { function -> function.annotations.any { it is A } }
2724
}
2825

29-
@Suppress("UNCHECKED_CAST")
30-
fun <T : Any> KClass<T>.getKConstructor(): Pair<Any?, KFunction<T>> {
31-
val constructors = ArrayList<Pair<Any?, KFunction<T>>>()
32-
33-
this.getAnnotatedFunctionsFromCompanionObject<KConstructor>()?.let { (instance, functions) ->
34-
functions.forEach {
35-
constructors.add(instance to it as KFunction<T>)
36-
}
37-
}
38-
39-
this.constructors.getAnnotatedFunctions<KConstructor, T>().forEach {
40-
constructors.add(null to it)
41-
}
42-
43-
if (constructors.size == 1) return constructors.single()
44-
45-
if (constructors.isEmpty()) return null to this.primaryConstructor!!
46-
47-
throw IllegalArgumentException("${this.jvmName} has multiple ${KConstructor::class.jvmName}.")
48-
}
49-
5026
fun KParameter.getKClass(): KClass<*> = type.classifier as KClass<*>

src/main/kotlin/com/mapk/core/KFunctionForCall.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.mapk.core.internal.ArgumentBinder
55
import com.mapk.core.internal.BucketGenerator
66
import com.mapk.core.internal.ParameterNameConverter
77
import com.mapk.core.internal.getAliasOrName
8+
import com.mapk.core.internal.getKConstructor
89
import com.mapk.core.internal.isUseDefaultArgument
910
import kotlin.reflect.KClass
1011
import kotlin.reflect.KFunction

src/main/kotlin/com/mapk/core/internal/Functions.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package com.mapk.core.internal
22

3+
import com.mapk.annotations.KConstructor
34
import com.mapk.annotations.KParameterAlias
45
import com.mapk.annotations.KUseDefaultArgument
6+
import com.mapk.core.getAnnotatedFunctions
7+
import com.mapk.core.getAnnotatedFunctionsFromCompanionObject
58
import java.lang.IllegalArgumentException
9+
import kotlin.reflect.KClass
10+
import kotlin.reflect.KFunction
611
import kotlin.reflect.KParameter
712
import kotlin.reflect.full.findAnnotation
13+
import kotlin.reflect.full.primaryConstructor
814
import kotlin.reflect.jvm.jvmName
915

1016
/**
@@ -24,3 +30,24 @@ internal fun KParameter.isUseDefaultArgument(): Boolean {
2430
}
2531
return false
2632
}
33+
34+
@Suppress("UNCHECKED_CAST")
35+
internal fun <T : Any> KClass<T>.getKConstructor(): Pair<Any?, KFunction<T>> {
36+
val constructors = ArrayList<Pair<Any?, KFunction<T>>>()
37+
38+
this.getAnnotatedFunctionsFromCompanionObject<KConstructor>()?.let { (instance, functions) ->
39+
functions.forEach {
40+
constructors.add(instance to it as KFunction<T>)
41+
}
42+
}
43+
44+
this.constructors.getAnnotatedFunctions<KConstructor, T>().forEach {
45+
constructors.add(null to it)
46+
}
47+
48+
if (constructors.size == 1) return constructors.single()
49+
50+
if (constructors.isEmpty()) return null to this.primaryConstructor!!
51+
52+
throw IllegalArgumentException("${this.jvmName} has multiple ${KConstructor::class.jvmName}.")
53+
}

0 commit comments

Comments
 (0)