Class TypeQualifierApplications


  • public class TypeQualifierApplications
    extends java.lang.Object
    Figure out where and how type qualifier annotations are applied.
    • Field Detail

      • DEBUG

        static final boolean DEBUG
      • DEBUG_METHOD

        static final java.lang.String DEBUG_METHOD
      • DEBUG_DEFAULT_ANNOTATION

        static final boolean DEBUG_DEFAULT_ANNOTATION
      • CHECK_EXCLUSIVE

        static final boolean CHECK_EXCLUSIVE
        Should exclusive type qualifiers be handled?
        See Also:
        Constant Field Values
    • Constructor Detail

      • TypeQualifierApplications

        public TypeQualifierApplications()
    • Method Detail

      • clearInstance

        public static void clearInstance()
      • getDirectParameterAnnotations

        private static java.util.HashMap<XMethod,​java.util.Map<java.lang.Integer,​java.util.Collection<AnnotationValue>>> getDirectParameterAnnotations()
      • updateAnnotations

        public static void updateAnnotations​(AnnotatedObject object)
      • getDirectAnnotation

        private static java.util.Collection<AnnotationValue> getDirectAnnotation​(AnnotatedObject m)
        Get the direct annotations (if any) on given AnnotatedObject.
        Parameters:
        m - an AnnotatedObject
        Returns:
        Collection of AnnotationValues representing annotations directly applied to this AnnotatedObject
      • getDirectAnnotation

        private static java.util.Collection<AnnotationValue> getDirectAnnotation​(XMethod m,
                                                                                 int parameter)
        Get the direct annotations (if any) on given method parameter.
        Parameters:
        m - a method
        parameter - a parameter (0 == first parameter)
        Returns:
        Collection of AnnotationValues representing annotations directly applied to this parameter
      • getDirectApplications

        public static void getDirectApplications​(java.util.Set<TypeQualifierAnnotation> result,
                                                 XMethod o,
                                                 int parameter)
        Populate a Set of TypeQualifierAnnotations representing directly-applied type qualifier annotations on given method parameter.
        Parameters:
        result - Set of TypeQualifierAnnotations
        o - a method
        parameter - a parameter (0 == first parameter)
      • getDirectApplications

        public static void getDirectApplications​(java.util.Set<TypeQualifierAnnotation> result,
                                                 AnnotatedObject o,
                                                 java.lang.annotation.ElementType e)
        Populate a Set of TypeQualifierAnnotations representing directly-applied type qualifier annotations on given AnnotatedObject.
        Parameters:
        result - Set of TypeQualifierAnnotations
        o - an AnnotatedObject
        e - ElementType representing kind of annotated object
      • constructTypeQualifierAnnotation

        public static TypeQualifierAnnotation constructTypeQualifierAnnotation​(AnnotationValue v)
        Resolve a raw AnnotationValue into a TypeQualifierAnnotation.
        Parameters:
        v - a raw AnnotationValue
        Returns:
        a constructed TypeQualifierAnnotation
      • constructTypeQualifierAnnotation

        public static void constructTypeQualifierAnnotation​(java.util.Set<TypeQualifierAnnotation> set,
                                                            AnnotationValue v)
        Resolve a raw AnnotationValue into a TypeQualifierAnnotation, storing result in given Set.
        Parameters:
        set - Set of resolved TypeQualifierAnnotations
        v - a raw AnnotationValue
      • getApplicableScopedApplications

        private static void getApplicableScopedApplications​(java.util.Set<TypeQualifierAnnotation> result,
                                                            AnnotatedObject o,
                                                            java.lang.annotation.ElementType e)
        Populate Set of TypeQualifierAnnotations for given AnnotatedObject, taking into account annotations applied to outer scopes (e.g., enclosing classes and packages.)
        Parameters:
        result - Set of TypeQualifierAnnotations
        o - an AnnotatedObject
        e - ElementType representing kind of AnnotatedObject
      • getApplicableScopedApplications

        private static java.util.Collection<TypeQualifierAnnotation> getApplicableScopedApplications​(AnnotatedObject o,
                                                                                                     java.lang.annotation.ElementType e)
        Get the collection of resolved TypeQualifierAnnotations for a given AnnotatedObject, taking into account annotations applied to outer scopes (e.g., enclosing classes and packages.)
        Parameters:
        o - an AnnotatedObject
        e - ElementType representing kind of AnnotatedObject
        Returns:
        Collection of resolved TypeQualifierAnnotations
      • getApplicableScopedApplications

        private static java.util.Collection<TypeQualifierAnnotation> getApplicableScopedApplications​(XMethod o,
                                                                                                     int parameter)
        Get the collection of resolved TypeQualifierAnnotations for a given parameter, taking into account annotations applied to outer scopes (e.g., enclosing classes and packages.)
        Parameters:
        o - a method
        parameter - a parameter (0 == first parameter)
        Returns:
        Collection of resolved TypeQualifierAnnotations
      • getApplicableApplications

        public static java.util.Collection<TypeQualifierAnnotation> getApplicableApplications​(AnnotatedObject o)
        Get the Collection of resolved TypeQualifierAnnotations representing directly applied and default (outer scope) type qualifier annotations for given AnnotatedObject.

        NOTE: does not properly account for inherited annotations on instance methods. It is ok to call this method to find out generally-relevant TypeQualifierAnnotations, but not to find the effective TypeQualifierAnnotation.

        Parameters:
        o - an AnnotatedObject
        Returns:
        Collection of TypeQualifierAnnotations applicable to the AnnotatedObject
      • getApplicableApplications

        public static java.util.Collection<TypeQualifierAnnotation> getApplicableApplications​(XMethod o,
                                                                                              int parameter)
        Get the Collection of resolved TypeQualifierAnnotations representing directly applied and default (outer scope) type qualifier annotations for given method parameter.

        NOTE: does not properly account for inherited annotations on instance method parameters. It is ok to call this method to find out generally-relevant TypeQualifierAnnotations, but not to find the effective TypeQualifierAnnotation.

        Parameters:
        o - a method
        parameter - a parameter (0 == first parameter)
        Returns:
        Collection of TypeQualifierAnnotations applicable to the method parameter
      • findMatchingTypeQualifierAnnotation

        @CheckForNull
        private static TypeQualifierAnnotation findMatchingTypeQualifierAnnotation​(java.util.Collection<TypeQualifierAnnotation> typeQualifierAnnotations,
                                                                                   TypeQualifierValue<?> typeQualifierValue)
        Look up a TypeQualifierAnnotation matching given TypeQualifierValue.
        Parameters:
        typeQualifierAnnotations - a Collection of TypeQualifierAnnotations
        typeQualifierValue - a TypeQualifierValue
        Returns:
        matching TypeQualifierAnnotation, or null if none
      • getDefaultAnnotation

        @CheckForNull
        private static TypeQualifierAnnotation getDefaultAnnotation​(AnnotatedObject o,
                                                                    TypeQualifierValue<?> typeQualifierValue,
                                                                    java.lang.annotation.ElementType elementType)
        Look for a default type qualifier annotation.
        Parameters:
        o - an AnnotatedObject
        typeQualifierValue - a TypeQualifierValue
        elementType - type of element for which we're looking for a default annotation
        Returns:
        default TypeQualifierAnnotation, or null if none
      • getEffectiveTypeQualifierAnnotation

        public static TypeQualifierAnnotation getEffectiveTypeQualifierAnnotation​(AnnotatedObject o,
                                                                                  TypeQualifierValue<?> typeQualifierValue)
        Get the effective TypeQualifierAnnotation on given AnnotatedObject. Takes into account inherited and default (outer scope) annotations. Also takes exclusive qualifiers into account.
        Parameters:
        o - an AnnotatedObject
        typeQualifierValue - a TypeQualifierValue specifying kind of annotation we want to look up
        Returns:
        the effective TypeQualifierAnnotation, or null if there is no effective TypeQualifierAnnotation on this AnnotatedObject
      • getDirectTypeQualifierAnnotation

        private static TypeQualifierAnnotation getDirectTypeQualifierAnnotation​(AnnotatedObject o,
                                                                                TypeQualifierValue<?> typeQualifierValue)
        Get a directly-applied TypeQualifierAnnotation on given AnnotatedObject.
        Parameters:
        o - an AnnotatedObject
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        directly-applied TypeQualifierAnnotation, or null if there is no such annotation on the AnnotatedObject
      • getInheritedTypeQualifierAnnotation

        public static TypeQualifierAnnotation getInheritedTypeQualifierAnnotation​(XMethod o,
                                                                                  TypeQualifierValue<?> typeQualifierValue)
        Get the effective inherited TypeQualifierAnnotation on given instance method.
        Parameters:
        o - an XMethod
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        effective TypeQualifierAnnotation inherited from overridden supertype methods, or null if there is no inherited TypeQualifierAnnotation
      • getDefaultTypeQualifierAnnotation

        private static TypeQualifierAnnotation getDefaultTypeQualifierAnnotation​(AnnotatedObject o,
                                                                                 TypeQualifierValue<?> typeQualifierValue,
                                                                                 boolean stopAtClassScope)
        Get the default (outer scope) annotation applicable to given AnnotatedObject.
        Parameters:
        o - an AnnotatedObject
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        the applicable default TypeQualifierAnnotation, or null if there is no default TypeQualifierAnnotation
      • getEffectiveTypeQualifierAnnotation

        @CheckForNull
        public static TypeQualifierAnnotation getEffectiveTypeQualifierAnnotation​(XMethod xmethod,
                                                                                  int parameter,
                                                                                  TypeQualifierValue<?> typeQualifierValue)
        Get the effective TypeQualifierAnnotation on given method parameter. Takes into account inherited and default (outer scope) annotations. Also takes exclusive qualifiers into account.
        Parameters:
        xmethod - a method
        parameter - a parameter (0 == first parameter)
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        effective TypeQualifierAnnotation on the parameter, or null if there is no effective TypeQualifierAnnotation
      • getDirectTypeQualifierAnnotation

        @CheckForNull
        @CheckReturnValue
        public static TypeQualifierAnnotation getDirectTypeQualifierAnnotation​(XMethod xmethod,
                                                                               int parameter,
                                                                               TypeQualifierValue<?> typeQualifierValue)
        Get the TypeQualifierAnnotation directly applied to given method parameter.
        Parameters:
        xmethod - a method
        parameter - a parameter (0 == first parameter)
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        TypeQualifierAnnotation directly applied to the parameter, or null if there is no directly applied TypeQualifierAnnotation
      • getInheritedTypeQualifierAnnotation

        @CheckForNull
        public static TypeQualifierAnnotation getInheritedTypeQualifierAnnotation​(XMethod xmethod,
                                                                                  int parameter,
                                                                                  TypeQualifierValue<?> typeQualifierValue)
        Get the effective inherited TypeQualifierAnnotation on the given instance method parameter.
        Parameters:
        xmethod - an instance method
        parameter - a parameter (0 == first parameter)
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        Returns:
        effective inherited TypeQualifierAnnotation on the parameter, or null if there is not effective TypeQualifierAnnotation
      • getDefaultTypeQualifierAnnotationForParameters

        @CheckForNull
        private static TypeQualifierAnnotation getDefaultTypeQualifierAnnotationForParameters​(XMethod xmethod,
                                                                                              TypeQualifierValue<?> typeQualifierValue,
                                                                                              boolean stopAtMethodScope)
        Get the default (outer-scope) TypeQualifierAnnotation on given method parameter.
        Parameters:
        xmethod - a method
        typeQualifierValue - the kind of TypeQualifierValue we are looking for
        stopAtMethodScope -
        Returns:
        the default (outer scope) TypeQualifierAnnotation on the parameter, or null if there is no default TypeQualifierAnnotation