GH-964, GH-959 Fix Kotlin type discovery

Resolves #964
Resolves #959
This commit is contained in:
Oleg Zhurakousky
2022-12-15 12:40:23 +01:00
parent 1d5dd42bcc
commit d4e6d7f05b

View File

@@ -55,9 +55,15 @@ public abstract class FunctionContextUtils {
} }
} }
Class<?> beanClass = null;
if (definition == null) { if (definition == null) {
return null; return null;
} }
else {
beanClass = resolveBeanClass(definition);
}
Object source = definition.getSource(); Object source = definition.getSource();
@@ -74,7 +80,7 @@ public abstract class FunctionContextUtils {
} }
else { else {
Type t = definition.getResolvableType().getType(); Type t = definition.getResolvableType().getType();
if (!(t instanceof ParameterizedType) && definition.hasBeanClass()) { if (!(t instanceof ParameterizedType) && beanClass != null) {
return FunctionTypeUtils.discoverFunctionTypeFromClass(definition.getBeanClass()); return FunctionTypeUtils.discoverFunctionTypeFromClass(definition.getBeanClass());
} }
return t; return t;
@@ -99,6 +105,15 @@ public abstract class FunctionContextUtils {
return params.toArray(new Class<?>[0]); 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) { private static Type findBeanType(AbstractBeanDefinition definition, String declaringClassName, String methodName) {
Class<?> factory = ClassUtils.resolveClassName(declaringClassName, null); Class<?> factory = ClassUtils.resolveClassName(declaringClassName, null);
Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition); Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition);