Skip to content

Commit 8daa2aa

Browse files
committed
GH-1073 Fix Kotlin type resolution
Resolves #1073
1 parent d120eb0 commit 8daa2aa

File tree

1 file changed

+10
-3
lines changed
  • spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog

1 file changed

+10
-3
lines changed

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Collection;
2525
import java.util.List;
2626
import java.util.Map;
27+
import java.util.concurrent.atomic.AtomicReference;
2728
import java.util.function.BiConsumer;
2829
import java.util.function.BiFunction;
2930
import java.util.function.Consumer;
@@ -192,7 +193,12 @@ else if (Function.class.isAssignableFrom(pojoFunctionClass) || BiFunction.class.
192193
public static Type discoverFunctionTypeFromClass(Class<?> functionalClass) {
193194
if (KotlinDetector.isKotlinPresent()) {
194195
if (Function1.class.isAssignableFrom(functionalClass)) {
195-
return TypeResolver.reify(Function1.class, (Class<Function1<?, ?>>) functionalClass);
196+
try {
197+
return TypeResolver.reify(Function1.class, (Class<Function1<?, ?>>) functionalClass);
198+
}
199+
catch (Exception e) {
200+
return discoverFunctionTypeFromFunctionMethod(discoverFunctionalMethod(functionalClass));
201+
}
196202
}
197203
else if (Function0.class.isAssignableFrom(functionalClass)) {
198204
return TypeResolver.reify(Function0.class, (Class<Function0<?>>) functionalClass);
@@ -252,10 +258,11 @@ public static Type discoverFunctionTypeFromFunctionMethod(Method functionMethod)
252258
Assert.isTrue(
253259
functionMethod.getName().equals("apply") ||
254260
functionMethod.getName().equals("accept") ||
255-
functionMethod.getName().equals("get"),
261+
functionMethod.getName().equals("get") ||
262+
functionMethod.getName().equals("invoke"),
256263
"Only Supplier, Function or Consumer supported at the moment. Was " + functionMethod.getDeclaringClass());
257264

258-
if (functionMethod.getName().equals("apply")) {
265+
if (functionMethod.getName().equals("apply") || functionMethod.getName().equals("invoke")) {
259266
return ResolvableType.forClassWithGenerics(Function.class,
260267
ResolvableType.forMethodParameter(functionMethod, 0),
261268
ResolvableType.forMethodReturnType(functionMethod)).getType();

0 commit comments

Comments
 (0)