Java Reflection Annotation getAnnotationWithinHierarchy(Class fsmClass, Class aggregateClass)

Here you can find the source of getAnnotationWithinHierarchy(Class fsmClass, Class aggregateClass)

Description

Get annotation within hierarchy

License

Apache License

Declaration

public static <A extends Annotation> Object getAnnotationWithinHierarchy(Class<?> fsmClass,
        Class<A> aggregateClass) throws ReflectiveOperationException 

Method Source Code


//package com.java2s;
//License from project: Apache License 

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;

import java.lang.reflect.Proxy;

public class Main {
    /**/*w w w .  j av a  2s.  c o  m*/
     * Get annotation within hierarchy
     */
    public static <A extends Annotation> Object getAnnotationWithinHierarchy(Class<?> fsmClass,
            Class<A> aggregateClass) throws ReflectiveOperationException {
        while (fsmClass != null) {
            if (getAnnotation(fsmClass, aggregateClass) != null) {
                return getAnnotation(fsmClass, aggregateClass);
            }
            fsmClass = fsmClass.getSuperclass();//NOSONAR
        }
        return null;
    }

    /**
     * Get annotation of an object via reflection
     */
    public static Object getAnnotation(AnnotatedElement aobj, Class aClass) throws ReflectiveOperationException {
        for (Object a : aobj.getAnnotations()) {
            if (isAnnotationInstance(aClass, a))
                return a;
        }
        return null;
    }

    private static boolean isAnnotationInstance(Class aClass, Object a) {
        if (Proxy.isProxyClass(a.getClass())) {
            for (Class aInterface : a.getClass().getInterfaces()) {
                if (aInterface.isAssignableFrom(aClass)) {
                    return true;
                }
            }
        }
        return aClass.isInstance(a);
    }
}

Related

  1. getAnnotationValue(Annotation annotation, String valueName)
  2. getAnnotationValue(Class anno, Field field, String paramName)
  3. getAnnotationValue(final A annotation, final Function valueRetriever, final V defaultValue)
  4. getAnnotationValue(Object aObj, String aValue)
  5. getAnnotationValue(Object obj, Class annotation, String field)
  6. getAnnotationWithMetaAnnotation(AnnotatedElement annotatedElement, Class metaAnnotationType)