diff --git a/src/main/kotlin/com/hiczp/caeruleum/Caeruleum.kt b/src/main/kotlin/com/hiczp/caeruleum/Caeruleum.kt index fa343e7..dba1c28 100644 --- a/src/main/kotlin/com/hiczp/caeruleum/Caeruleum.kt +++ b/src/main/kotlin/com/hiczp/caeruleum/Caeruleum.kt @@ -12,16 +12,13 @@ import kotlin.reflect.full.allSuperclasses * @param useCache save resolved ServiceFunction and reuse it, default is true */ class Caeruleum(useCache: Boolean = true) { - private val resolveServiceFunction: (method: Method, parse: (method: Method) -> ServiceFunction) -> ServiceFunction - - init { - resolveServiceFunction = if (useCache) { + private val resolveServiceFunction: (method: Method, parse: (method: Method) -> ServiceFunction) -> ServiceFunction = + if (useCache) { val cachedServiceFunctions = ConcurrentHashMap() ({ method, parse -> cachedServiceFunctions.computeIfAbsent(method) { parse(it) } }) } else { { method, parse -> parse(method) } } - } /** * Create ServiceInterface implementation diff --git a/src/main/kotlin/com/hiczp/caeruleum/ServiceFunction.kt b/src/main/kotlin/com/hiczp/caeruleum/ServiceFunction.kt index 0aaee7e..0b82b63 100644 --- a/src/main/kotlin/com/hiczp/caeruleum/ServiceFunction.kt +++ b/src/main/kotlin/com/hiczp/caeruleum/ServiceFunction.kt @@ -14,7 +14,7 @@ import kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED internal sealed interface ServiceFunction : InvocationHandler -internal object DelegationServiceFunction : ServiceFunction { +internal data object DelegationServiceFunction : ServiceFunction { override fun invoke(proxy: Any, method: Method, args: Array?): Any? = method(proxy, *args.orEmpty()) }