From 8e434eb189e749ce33c8b47649e4be8c39bf28c0 Mon Sep 17 00:00:00 2001 From: FFN <> Date: Tue, 7 Dec 2021 16:18:59 +0900 Subject: [PATCH 1/4] Added up to ArityNineteen() --- .../dsl/operations/AbstractOperationDSL.kt | 20 + .../kgraphql/schema/model/FunctionWrapper.kt | 389 ++++++++++++++++++ 2 files changed, 409 insertions(+) diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt index ef588537..fcf93bcb 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt @@ -58,6 +58,26 @@ abstract class AbstractOperationDSL( fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C) -> T) = resolver(FunctionWrapper.on(function)) + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N) -> T) = resolver(FunctionWrapper.on(function)) + fun accessRule(rule: (Context) -> Exception?){ val accessRuleAdapter: (Nothing?, Context) -> Exception? = { _, ctx -> rule(ctx) } this.accessRuleBlock = accessRuleAdapter diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt index bca886b7..3b03e1cd 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt @@ -62,6 +62,35 @@ interface FunctionWrapper : Publisher { fun on (function : suspend (R, E, W, Q, A, S, G, H, J) -> T, hasReceiver: Boolean = false) = ArityNine(function, hasReceiver) + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K) -> T, hasReceiver: Boolean = false) + = ArityTen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L) -> T, hasReceiver: Boolean = false) + = ArityEleven(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M) -> T, hasReceiver: Boolean = false) + = ArityTwelve(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N) -> T, hasReceiver: Boolean = false) + = ArityThirteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O) -> T, hasReceiver: Boolean = false) + = ArityFourteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P) -> T, hasReceiver: Boolean = false) + = ArityFifteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U) -> T, hasReceiver: Boolean = false) + = AritySixteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V) -> T, hasReceiver: Boolean = false) + = AritySeventeen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X) -> T, hasReceiver: Boolean = false) + = ArityEighteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y) -> T, hasReceiver: Boolean = false) + = ArityNineteen(function, hasReceiver) } val kFunction: KFunction @@ -502,6 +531,366 @@ interface FunctionWrapper : Publisher { } } + class ArityTen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityEleven( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwelve( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityThirteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityFourteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityFifteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class AritySixteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class AritySeventeen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityEighteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityNineteen( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 9 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + fun hasReturnType(): Boolean = getObjectTypeName() != "java.lang.Void" && getObjectTypeName() != "kotlin.Unit" private fun getObjectTypeName() = kFunction.returnType.jvmErasure.javaObjectType.name From eb85651222027539e7e01e8a7a484481d36bbfd4 Mon Sep 17 00:00:00 2001 From: FFN <> Date: Tue, 7 Dec 2021 18:14:04 +0900 Subject: [PATCH 2/4] The maximum number of query resolver's function arguments was 9, but it has been expanded to 19. --- .../kgraphql/schema/model/FunctionWrapper.kt | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt index 3b03e1cd..ac1e259b 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt @@ -30,37 +30,37 @@ interface FunctionWrapper : Publisher { = ArityN(function) fun on (function : suspend () -> T) : FunctionWrapper - = ArityZero(function) + = ArityZero(function) fun on (function : suspend (R) -> T) - = ArityOne(function, false) + = ArityOne(function, false) fun on (function : suspend (R) -> T, hasReceiver: Boolean = false) - = ArityOne(function, hasReceiver) + = ArityOne(function, hasReceiver) fun on (function : suspend (R, E) -> T, hasReceiver: Boolean = false) - = ArityTwo(function, hasReceiver) + = ArityTwo(function, hasReceiver) fun on (function : suspend (R, E, W) -> T, hasReceiver: Boolean = false) - = ArityThree(function, hasReceiver) + = ArityThree(function, hasReceiver) fun on (function : suspend (R, E, W, Q) -> T, hasReceiver: Boolean = false) - = ArityFour(function, hasReceiver) + = ArityFour(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A) -> T, hasReceiver: Boolean = false) - = ArityFive(function, hasReceiver) + = ArityFive(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S) -> T, hasReceiver: Boolean = false) - = AritySix(function, hasReceiver) + = AritySix(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G) -> T, hasReceiver: Boolean = false) - = AritySeven(function, hasReceiver) + = AritySeven(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H) -> T, hasReceiver: Boolean = false) - = ArityEight(function, hasReceiver) + = ArityEight(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J) -> T, hasReceiver: Boolean = false) - = ArityNine(function, hasReceiver) + = ArityNine(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K) -> T, hasReceiver: Boolean = false) = ArityTen(function, hasReceiver) @@ -548,7 +548,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 10 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -584,7 +584,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 11 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -620,7 +620,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 12 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -656,7 +656,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 13 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -692,7 +692,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 14 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -728,7 +728,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 15 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -764,7 +764,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 16 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -800,7 +800,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 17 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -836,7 +836,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 18 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ @@ -872,7 +872,7 @@ interface FunctionWrapper : Publisher { @Synchronized get() = implementation.reflect()!! - override fun arity(): Int = 9 + override fun arity(): Int = 19 override suspend fun invoke(vararg args: Any?): T? { if(args.size == arity()){ From 42f0e0629e0535baf0c9e401570c51a30af40a9a Mon Sep 17 00:00:00 2001 From: FFN <> Date: Tue, 7 Dec 2021 18:37:25 +0900 Subject: [PATCH 3/4] Fixed Indent.. --- .../kgraphql/schema/model/FunctionWrapper.kt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt index ac1e259b..af93c9d1 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt @@ -27,70 +27,70 @@ interface FunctionWrapper : Publisher { //lots of boilerplate here, because kotlin-reflect doesn't support invoking lambdas, local and anonymous functions yet companion object { fun on (function : KFunction) : FunctionWrapper - = ArityN(function) + = ArityN(function) fun on (function : suspend () -> T) : FunctionWrapper - = ArityZero(function) + = ArityZero(function) fun on (function : suspend (R) -> T) - = ArityOne(function, false) + = ArityOne(function, false) fun on (function : suspend (R) -> T, hasReceiver: Boolean = false) - = ArityOne(function, hasReceiver) + = ArityOne(function, hasReceiver) fun on (function : suspend (R, E) -> T, hasReceiver: Boolean = false) - = ArityTwo(function, hasReceiver) + = ArityTwo(function, hasReceiver) fun on (function : suspend (R, E, W) -> T, hasReceiver: Boolean = false) - = ArityThree(function, hasReceiver) + = ArityThree(function, hasReceiver) fun on (function : suspend (R, E, W, Q) -> T, hasReceiver: Boolean = false) - = ArityFour(function, hasReceiver) + = ArityFour(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A) -> T, hasReceiver: Boolean = false) - = ArityFive(function, hasReceiver) + = ArityFive(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S) -> T, hasReceiver: Boolean = false) - = AritySix(function, hasReceiver) + = AritySix(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G) -> T, hasReceiver: Boolean = false) - = AritySeven(function, hasReceiver) + = AritySeven(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H) -> T, hasReceiver: Boolean = false) - = ArityEight(function, hasReceiver) + = ArityEight(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J) -> T, hasReceiver: Boolean = false) - = ArityNine(function, hasReceiver) + = ArityNine(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K) -> T, hasReceiver: Boolean = false) - = ArityTen(function, hasReceiver) + = ArityTen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L) -> T, hasReceiver: Boolean = false) - = ArityEleven(function, hasReceiver) + = ArityEleven(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M) -> T, hasReceiver: Boolean = false) - = ArityTwelve(function, hasReceiver) + = ArityTwelve(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N) -> T, hasReceiver: Boolean = false) - = ArityThirteen(function, hasReceiver) + = ArityThirteen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O) -> T, hasReceiver: Boolean = false) - = ArityFourteen(function, hasReceiver) + = ArityFourteen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P) -> T, hasReceiver: Boolean = false) - = ArityFifteen(function, hasReceiver) + = ArityFifteen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U) -> T, hasReceiver: Boolean = false) - = AritySixteen(function, hasReceiver) + = AritySixteen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V) -> T, hasReceiver: Boolean = false) - = AritySeventeen(function, hasReceiver) + = AritySeventeen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X) -> T, hasReceiver: Boolean = false) - = ArityEighteen(function, hasReceiver) + = ArityEighteen(function, hasReceiver) fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y) -> T, hasReceiver: Boolean = false) - = ArityNineteen(function, hasReceiver) + = ArityNineteen(function, hasReceiver) } val kFunction: KFunction From eb3b4847031aa95f6d2b4524ead07c69c13a4485 Mon Sep 17 00:00:00 2001 From: FFN <> Date: Fri, 21 Jan 2022 13:57:36 +0900 Subject: [PATCH 4/4] add --- .../dsl/operations/AbstractOperationDSL.kt | 22 + .../kgraphql/schema/model/FunctionWrapper.kt | 431 ++++++++++++++++++ 2 files changed, 453 insertions(+) diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt index fcf93bcb..65716861 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/dsl/operations/AbstractOperationDSL.kt @@ -78,6 +78,28 @@ abstract class AbstractOperationDSL( fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N) -> T) = resolver(FunctionWrapper.on(function)) + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1) -> T) = resolver(FunctionWrapper.on(function)) + + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1, R2) -> T) = resolver(FunctionWrapper.on(function)) + + @JvmName("resolver1") + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1, R2, R3) -> T) = resolver(FunctionWrapper.on(function)) + + @JvmName("resolver2") + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1, R2, R3, R4) -> T) = resolver(FunctionWrapper.on(function)) + + @JvmName("resolver3") + fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1, R2, R3, R4, R5) -> T) = resolver(FunctionWrapper.on(function)) + + +// fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, G1, G2, R2, R3) -> T) = resolver(FunctionWrapper.on(function)) + + +// fun resolver(function: suspend (R, E, W, Q, A, S, B, U, C, D, F, G, H, I, J, K, L, M, N, R0, R1, R2, R3, R4, R5, R6) -> T) = resolver(FunctionWrapper.on(function)) + + fun accessRule(rule: (Context) -> Exception?){ val accessRuleAdapter: (Nothing?, Context) -> Exception? = { _, ctx -> rule(ctx) } this.accessRuleBlock = accessRuleAdapter diff --git a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt index af93c9d1..1498aafe 100644 --- a/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt +++ b/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/model/FunctionWrapper.kt @@ -91,6 +91,39 @@ interface FunctionWrapper : Publisher { fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y) -> T, hasReceiver: Boolean = false) = ArityNineteen(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0) -> T, hasReceiver: Boolean = false) + = ArityTwenty(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1) -> T, hasReceiver: Boolean = false) + = ArityTwentyOne(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2) -> T, hasReceiver: Boolean = false) + = ArityTwentyTwo(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3) -> T, hasReceiver: Boolean = false) + = ArityTwentyThree(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4) -> T, hasReceiver: Boolean = false) + = ArityTwentyFour(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5) -> T, hasReceiver: Boolean = false) + = ArityTwentyFive(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5, R6) -> T, hasReceiver: Boolean = false) + = ArityTwentySix(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5, R6, R7) -> T, hasReceiver: Boolean = false) + = ArityTwentySeven(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5, R6, R7, R8) -> T, hasReceiver: Boolean = false) + = ArityTwentyEight(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9) -> T, hasReceiver: Boolean = false) + = ArityTwentyNine(function, hasReceiver) + + fun on (function : suspend (R, E, W, Q, A, S, G, H, J, K, L, M, N, O, P, U, V, X, Y, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, E0) -> T, hasReceiver: Boolean = false) + = ArityThirty(function, hasReceiver) } val kFunction: KFunction @@ -891,6 +924,404 @@ interface FunctionWrapper : Publisher { } } + class ArityTwenty( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 20 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentyOne( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 21 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + + class ArityTwentyTwo( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 22 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + + class ArityTwentyThree( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 23 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentyFour( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 24 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentyFive( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 25 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentySix( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5, R6)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 26 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5, args[25] as R6 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentySeven( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5, R6, R7)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 27 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5, args[25] as R6, args[26] as R7 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentyEight( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5, R6, R7, R8)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 28 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5, args[25] as R6, args[26] as R7, args[27] as R8 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityTwentyNine( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 29 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5, args[25] as R6, args[26] as R7, args[27] as R8, args[28] as R9 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + + class ArityThirty( + val implementation : suspend (R, E, W, Q, A, S, D, F, G, H, I, J, K, L, M, N, O, P, U, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, E0)-> T, override val hasReceiver: Boolean + ) : Base() { + override fun unsubscribe(subscription: String) { + subscribers.remove(subscription) + } + override suspend fun invoke(args: List, subscriptionArgs: List, objectWriter: ObjectWriter): T? { + TODO("not needed") + } + override fun subscribe(subscription: String, subscriber: Subscriber) { + subscribers[subscription] = subscriber + } + + override val kFunction: KFunction + @Synchronized + get() = implementation.reflect()!! + + override fun arity(): Int = 30 + + override suspend fun invoke(vararg args: Any?): T? { + if(args.size == arity()){ + val t = implementation(args[0] as R, args[1] as E, args[2] as W, args[3] as Q, args[4] as A, args[5] as S, args[6] as D, args[7] as F, args[8] as G, args[9] as H, args[10] as I, args[11] as J, args[12] as K, args[13] as L, args[14] as M, args[15] as N, args[16] as O, args[17] as P, args[18] as U, args[19] as R0, args[20] as R1, args[21] as R2, args[22] as R3, args[23] as R4, args[24] as R5, args[25] as R6, args[26] as R7, args[27] as R8, args[28] as R9, args[29] as E0 ) + subscribers.forEach{ + it.value?.onNext(t) + } + return t + } else { + val e = IllegalArgumentException("This function needs exactly ${arity()} arguments") + subscribers.forEach{ + it.value?.onError(e) + } + throw e + } + } + } + fun hasReturnType(): Boolean = getObjectTypeName() != "java.lang.Void" && getObjectTypeName() != "kotlin.Unit" private fun getObjectTypeName() = kFunction.returnType.jvmErasure.javaObjectType.name