All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.oneandone.iocunit.analyzer.ConfigStatics Maven / Gradle / Ivy

package com.oneandone.iocunit.analyzer;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Set;

import javax.decorator.Decorator;
import javax.enterprise.inject.spi.Extension;
import javax.inject.Inject;
import javax.interceptor.Interceptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author aschoerk
 */
public class ConfigStatics {

    static Logger logger = LoggerFactory.getLogger(ConfigStatics.class);

    static boolean isInterceptingBean(Class c) {
        if(c.getAnnotation(Interceptor.class) != null || c.getAnnotation(Decorator.class) != null) {
            return true;
        }
        else {
            return false;
        }
    }

    public static boolean mightBeBean(Class c) {

        try {
            if(c.isInterface() || c.isPrimitive() || c.isLocalClass() || Modifier.isAbstract(c.getModifiers())
               || c.isAnonymousClass() || c.isLocalClass() || c.isAnnotation()
               || (c.getEnclosingClass() != null && !Modifier.isStatic(c.getModifiers()))
               || String.class.isAssignableFrom(c)) {
                return false;
            }
            final Constructor[] declaredConstructors = c.getDeclaredConstructors();
            if(declaredConstructors.length == 0) {
                return false;
            }
            boolean constructorOk = false;
            for (Constructor constructor : declaredConstructors) {
                if(constructor.getParameters().length == 0) {
                    constructorOk = true;
                }
                else {
                    if(constructor.getAnnotation(Inject.class) != null) {
                        constructorOk = true;
                    }
                }
            }
            if(!constructorOk) {
                return false;
            }
            if(isExtension(c)) {
                return false;
            }
        } catch (NoClassDefFoundError|IncompatibleClassChangeError e) {
            logger.warn("NoClassDefFoundError analyzing {}",c.getName());
            return false;
        }
        return true;
    }

    public static boolean isExtension(final Class c) {
        return (Extension.class.isAssignableFrom(c));
    }

    public static boolean isParameterizedType(Type t) {
        if(t instanceof ParameterizedType) {
            return true;
        }
        else {
            if(t == null || t.equals(Object.class)) {
                return false;
            }
            else {
                if(t instanceof Class) {
                    if (((Class) t).getTypeParameters().length > 0)
                        return true;
                    return isParameterizedType(((Class) t).getGenericSuperclass());
                }
                else {
                    return false;
                }
            }
        }
    }


    interface ClassHandler {
        void handle(Class c);
    }


    protected static void doInClassAndSuperClasses(final Class c, final ClassHandler classHandler) {
        if(c == null || c.equals(Object.class)) {
            return;
        }
        else {
            classHandler.handle(c);
            doInClassAndSuperClasses(c.getSuperclass(), classHandler);
            return;
        }
    }

    static Class[] setToArray(final Set> setParam) {
        return setParam.toArray(new Class[setParam.size()]);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy