Class AnnotationAnalyzer

java.lang.Object
org.glassfish.pfl.basic.algorithm.AnnotationAnalyzer

public class AnnotationAnalyzer extends Object
Given an AnnotatedElement, fetch all of the inherited annotations. This include annotations on methods that may be overridden. Uses ClassAnalyzer to linearize the inheritance hierarchy. This also includes any added annotations for Class and Method. Constructor, Field, Parameter, and Package annotations are just translated from the standard reflective calls.
  • Field Details

  • Constructor Details

    • AnnotationAnalyzer

      public AnnotationAnalyzer()
  • Method Details

    • putIfNotPresent

      private <K, V> void putIfNotPresent(Map<K,V> map, K key, V value)
    • addAnnotation

      public void addAnnotation(AnnotatedElement element, Annotation annotation)
      Add an annotation to element, which must be a Class, Method, or Constructor.
      Parameters:
      element -
      annotation -
    • addInheritedAnnotations

      public void addInheritedAnnotations(Class<?> cls, Class<?> ancestor)
      Add all annotations on cls (including inherited annotations and its methods (including overridden methods in super classes and interfaces) to super (which must be a super class or interface of cls).
      Parameters:
      cls -
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(Class<?> cls)
      Return a map of all annotations defined on cls and its super classes and interfaces in ClassAnalyzer order. Annotations nearer the front of the list replace those later in the list of the same type.
      Parameters:
      cls - Class to analyze.
      Returns:
      Map from annotation class to annotation value.
    • getAnnotations

      private Map<Class<?>,Annotation> getAnnotations(Class<?> cls, boolean includeAddedAnnotations)
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(Method method)
      Return a map of all annotations defined in method and its overriden methods in the inheritance order of the ClassAnalyzer for the method's defining class.
      Parameters:
      method - The method to analyze
      Returns:
      A map from annotation class to annotation
    • getAnnotations

      private Map<Class<?>,Annotation> getAnnotations(Method method, boolean includeAddedAnnotations)
    • makeAnnoMap

      private Map<Class<?>,Annotation> makeAnnoMap(Annotation[] annos)
    • getParameterAnnotations

      public List<Map<Class<?>,Annotation>> getParameterAnnotations(Method method)
      Same as cons.getParameterAnnotations, with the result converted to a list of maps.
      Parameters:
      method - A Java Method
      Returns:
      A list of maps from annotation class to annotation value
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(Constructor<?> cons)
      Same as cons.getAnnotations, with the result converted to a map.
      Parameters:
      cons - A Java Constructor
      Returns:
      A map from annotation class to annotation value
    • getParameterAnnotations

      public List<Map<Class<?>,Annotation>> getParameterAnnotations(Constructor<?> cons)
      Same as cons.getParameterAnnotations, with the result converted to a list of maps.
      Parameters:
      cons - A Java Constructor
      Returns:
      A list of maps from annotation class to annotation value
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(Field fld)
      Same as fld.getAnnotations, with the result converted to a map.
      Parameters:
      fld - A Java Field
      Returns:
      A map from annotation class to annotation value
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(Package pkg)
      Same as pkg.getAnnotations, with the result converted to a map.
      Parameters:
      pkg - A Java Package
      Returns:
      A map from annotation class to annotation value
    • getAnnotations

      public Map<Class<?>,Annotation> getAnnotations(AnnotatedElement elem)
      Return all annotations on the element, including any added annotations. Really just a convenience wrapper for the other getAnnotations methods.
      Parameters:
      elem - AnnotatedElement
      Returns:
      A map from annotation class to annotation value.
    • getAnnotation

      public <A extends Annotation> A getAnnotation(AnnotatedElement elem, Class<A> cls)