From d4e6d7f05b901f1bc84503de59159747bb4a4cc1 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 15 Dec 2022 12:40:23 +0100 Subject: [PATCH] GH-964, GH-959 Fix Kotlin type discovery Resolves #964 Resolves #959 --- .../context/config/FunctionContextUtils.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java index 5fcf7b989..241d0b18a 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java @@ -55,9 +55,15 @@ public abstract class FunctionContextUtils { } } + Class beanClass = null; + + if (definition == null) { return null; } + else { + beanClass = resolveBeanClass(definition); + } Object source = definition.getSource(); @@ -74,7 +80,7 @@ public abstract class FunctionContextUtils { } else { Type t = definition.getResolvableType().getType(); - if (!(t instanceof ParameterizedType) && definition.hasBeanClass()) { + if (!(t instanceof ParameterizedType) && beanClass != null) { return FunctionTypeUtils.discoverFunctionTypeFromClass(definition.getBeanClass()); } return t; @@ -99,6 +105,15 @@ public abstract class FunctionContextUtils { return params.toArray(new Class[0]); } + private static Class resolveBeanClass(AbstractBeanDefinition beanDefinition) { + try { + return beanDefinition.hasBeanClass() ? beanDefinition.getBeanClass() : ClassUtils.getDefaultClassLoader().loadClass(beanDefinition.getBeanClassName()); + } + catch (Exception e) { + return null; + } + } + private static Type findBeanType(AbstractBeanDefinition definition, String declaringClassName, String methodName) { Class factory = ClassUtils.resolveClassName(declaringClassName, null); Class[] params = getParamTypesFromBeanDefinitionFactory(factory, definition);