Skip to content

Commit ab39246

Browse files
committed
Polishing contribution
Closes gh-653
1 parent e7d7253 commit ab39246

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

spring-graphql/src/main/java/org/springframework/graphql/data/method/InvocableHandlerMethodSupport.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626

2727
import graphql.GraphQLContext;
2828
import io.micrometer.context.ContextSnapshot;
29-
import org.springframework.data.util.KotlinReflectionUtils;
3029
import reactor.core.publisher.Mono;
3130

3231
import org.springframework.core.CoroutinesUtils;
3332
import org.springframework.core.KotlinDetector;
33+
import org.springframework.data.util.KotlinReflectionUtils;
3434
import org.springframework.lang.Nullable;
3535
import org.springframework.util.Assert;
3636

@@ -82,18 +82,7 @@ protected Object doInvoke(GraphQLContext graphQLContext, Object... argValues) {
8282
Method method = getBridgedMethod();
8383
try {
8484
if (KotlinDetector.isSuspendingFunction(method)) {
85-
Object result = CoroutinesUtils.invokeSuspendingFunction(method, getBean(), argValues);
86-
87-
Class<?> returnType = KotlinReflectionUtils.getReturnType(method);
88-
89-
if (CompletableFuture.class.isAssignableFrom(returnType)) {
90-
@SuppressWarnings("unchecked")
91-
Mono<CompletableFuture<?>> mono = (Mono<CompletableFuture<?>>)result;
92-
// Unwrap nested CompletableFuture
93-
return mono.flatMap(Mono::fromFuture);
94-
}
95-
96-
return result;
85+
return invokeSuspendingFunction(getBean(), method, argValues);
9786
}
9887
Object result = method.invoke(getBean(), argValues);
9988
return handleReturnValue(graphQLContext, result);
@@ -119,6 +108,19 @@ protected Object doInvoke(GraphQLContext graphQLContext, Object... argValues) {
119108
}
120109
}
121110

111+
@SuppressWarnings({"ReactiveStreamsUnusedPublisher", "unchecked"})
112+
private static Object invokeSuspendingFunction(Object bean, Method method, Object[] argValues) {
113+
Object result = CoroutinesUtils.invokeSuspendingFunction(method, bean, argValues);
114+
115+
// Support DataLoader use
116+
Class<?> returnType = KotlinReflectionUtils.getReturnType(method);
117+
if (CompletableFuture.class.isAssignableFrom(returnType)) {
118+
return ((Mono<CompletableFuture<?>>) result).flatMap(Mono::fromFuture);
119+
}
120+
121+
return result;
122+
}
123+
122124
@Nullable
123125
@SuppressWarnings("deprecation")
124126
private Object handleReturnValue(GraphQLContext graphQLContext, @Nullable Object result) {

0 commit comments

Comments
 (0)