Search in sources :

Example 1 with ProviderDefinition

use of jodd.petite.ProviderDefinition in project jodd by oblac.

the class ProviderResolver method resolve.

/**
	 * Resolves all providers in the class
	 */
public ProviderDefinition[] resolve(BeanDefinition beanDefinition) {
    Class type = beanDefinition.getType();
    ClassDescriptor cd = ClassIntrospector.lookup(type);
    MethodDescriptor[] methods = cd.getAllMethodDescriptors();
    List<ProviderDefinition> list = new ArrayList<>();
    for (MethodDescriptor methodDescriptor : methods) {
        Method method = methodDescriptor.getMethod();
        PetiteProvider petiteProvider = method.getAnnotation(PetiteProvider.class);
        if (petiteProvider == null) {
            continue;
        }
        String providerName = petiteProvider.value();
        if (StringUtil.isBlank(providerName)) {
            // default provider name
            providerName = method.getName();
            if (providerName.endsWith("Provider")) {
                providerName = StringUtil.substring(providerName, 0, -8);
            }
        }
        ProviderDefinition providerDefinition;
        if (Modifier.isStatic(method.getModifiers())) {
            providerDefinition = new ProviderDefinition(providerName, method);
        } else {
            providerDefinition = new ProviderDefinition(providerName, beanDefinition.getName(), method);
        }
        list.add(providerDefinition);
    }
    ProviderDefinition[] providers;
    if (list.isEmpty()) {
        providers = ProviderDefinition.EMPTY;
    } else {
        providers = list.toArray(new ProviderDefinition[list.size()]);
    }
    return providers;
}
Also used : ClassDescriptor(jodd.introspector.ClassDescriptor) ArrayList(java.util.ArrayList) ProviderDefinition(jodd.petite.ProviderDefinition) Method(java.lang.reflect.Method) MethodDescriptor(jodd.introspector.MethodDescriptor) PetiteProvider(jodd.petite.meta.PetiteProvider)

Aggregations

Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 ClassDescriptor (jodd.introspector.ClassDescriptor)1 MethodDescriptor (jodd.introspector.MethodDescriptor)1 ProviderDefinition (jodd.petite.ProviderDefinition)1 PetiteProvider (jodd.petite.meta.PetiteProvider)1