Search in sources :

Example 1 with CubaDefaultListableBeanFactory

use of com.haulmont.cuba.core.sys.CubaDefaultListableBeanFactory in project cuba by cuba-platform.

the class AbstractBeansMetadata method getAvailableMethods.

protected List<MethodInfo> getAvailableMethods(String beanName) {
    List<MethodInfo> methods = new ArrayList<>();
    try {
        AutowireCapableBeanFactory beanFactory = AppContext.getApplicationContext().getAutowireCapableBeanFactory();
        if (beanFactory instanceof CubaDefaultListableBeanFactory) {
            BeanDefinition beanDefinition = ((CubaDefaultListableBeanFactory) beanFactory).getBeanDefinition(beanName);
            if (beanDefinition.isAbstract())
                return methods;
        }
        Object bean = AppBeans.get(beanName);
        @SuppressWarnings("unchecked") List<Class> classes = ClassUtils.getAllInterfaces(bean.getClass());
        for (Class aClass : classes) {
            if (aClass.getName().startsWith("org.springframework."))
                continue;
            Class<?> targetClass = bean instanceof TargetClassAware ? ((TargetClassAware) bean).getTargetClass() : bean.getClass();
            for (Method method : aClass.getMethods()) {
                if (isMethodAvailable(method)) {
                    Method targetClassMethod = targetClass.getMethod(method.getName(), method.getParameterTypes());
                    List<MethodParameterInfo> methodParameters = getMethodParameters(targetClassMethod);
                    MethodInfo methodInfo = new MethodInfo(method.getName(), methodParameters);
                    addMethod(methods, methodInfo);
                }
            }
            if (methods.isEmpty()) {
                for (Method method : bean.getClass().getMethods()) {
                    if (!method.getDeclaringClass().equals(Object.class) && isMethodAvailable(method)) {
                        List<MethodParameterInfo> methodParameters = getMethodParameters(method);
                        MethodInfo methodInfo = new MethodInfo(method.getName(), methodParameters);
                        addMethod(methods, methodInfo);
                    }
                }
            }
        }
    } catch (Throwable t) {
        log.debug(t.getMessage());
    }
    return methods;
}
Also used : TargetClassAware(org.springframework.aop.TargetClassAware) CubaDefaultListableBeanFactory(com.haulmont.cuba.core.sys.CubaDefaultListableBeanFactory) Method(java.lang.reflect.Method) AutowireCapableBeanFactory(org.springframework.beans.factory.config.AutowireCapableBeanFactory) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) MethodInfo(com.haulmont.cuba.core.app.scheduled.MethodInfo) MethodParameterInfo(com.haulmont.cuba.core.app.scheduled.MethodParameterInfo)

Aggregations

MethodInfo (com.haulmont.cuba.core.app.scheduled.MethodInfo)1 MethodParameterInfo (com.haulmont.cuba.core.app.scheduled.MethodParameterInfo)1 CubaDefaultListableBeanFactory (com.haulmont.cuba.core.sys.CubaDefaultListableBeanFactory)1 Method (java.lang.reflect.Method)1 TargetClassAware (org.springframework.aop.TargetClassAware)1 AutowireCapableBeanFactory (org.springframework.beans.factory.config.AutowireCapableBeanFactory)1 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)1