From 81eddedb6359e77baa775dfaff7d7d1c0760022c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 27 Mar 2025 15:57:39 +0100 Subject: [PATCH] GH-1251 Additional regression fixes with type discovery Tthis change specifically addresses the use of generics --- .../context/catalog/FunctionTypeUtils.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java index 9a818cb4e..0b4c20037 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java @@ -379,18 +379,25 @@ public final class FunctionTypeUtils { ResolvableType resolvableFunctionType = ResolvableType.forType(functionType); - ResolvableType resolvableInputType; - if (FunctionTypeUtils.isFunction(functionType)) { - resolvableInputType = resolvableFunctionType.as(Function.class); - } - else { - resolvableInputType = resolvableFunctionType.as(Consumer.class); - } + ResolvableType resolvableInputType = resolvableFunctionType.as(resolvableFunctionType.getRawClass()); + if (resolvableInputType.getType() instanceof ParameterizedType) { return resolvableInputType.getGeneric(0).getType(); } else { - return Object.class; + // will try another way. See GH-1251 + if (FunctionTypeUtils.isFunction(functionType)) { + resolvableInputType = resolvableFunctionType.as(Function.class); + } + else { + resolvableInputType = resolvableFunctionType.as(Consumer.class); + } + if (resolvableInputType.getType() instanceof ParameterizedType) { + return resolvableInputType.getGeneric(0).getType(); + } + else { + return Object.class; + } } }