From ff844ed99f90c36dfcfa16086d75665671ab9e97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=CC=81s=CC=8C=20Kr=CC=8Cec=CC=8Can?= Date: Wed, 21 Jul 2021 13:17:01 +0200 Subject: [PATCH] Allow overriding invokeSuspendingFunction This commit isolates the invocation of Kotlin coroutines into a separate template method, so that it can be overridden in subclasses of RequestMappingHandlerAdapter. Closes gh-27195 --- .../web/method/support/InvocableHandlerMethod.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java index 2cbf7d2617..5c18c09661 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java @@ -21,6 +21,9 @@ import java.lang.reflect.Method; import java.util.Arrays; import org.springframework.context.MessageSource; +import org.jetbrains.annotations.NotNull; +import org.reactivestreams.Publisher; + import org.springframework.core.CoroutinesUtils; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.KotlinDetector; @@ -200,7 +203,7 @@ public class InvocableHandlerMethod extends HandlerMethod { Method method = getBridgedMethod(); try { if (KotlinDetector.isSuspendingFunction(method)) { - return CoroutinesUtils.invokeSuspendingFunction(method, getBean(), args); + return invokeSuspendingFunction(method, args); } return method.invoke(getBean(), args); } @@ -228,4 +231,12 @@ public class InvocableHandlerMethod extends HandlerMethod { } } + /** + * Invokes Kotlin coroutine suspended function. + */ + @NotNull + protected Publisher invokeSuspendingFunction(Method method, Object[] args) { + return CoroutinesUtils.invokeSuspendingFunction(method, getBean(), args); + } + }