Interface QualifierKindHierarchy

All Known Implementing Classes:
DefaultQualifierKindHierarchy, UnitsAnnotatedTypeFactory.UnitsQualifierKindHierarchy

@AnnotatedFor("nullness") public interface QualifierKindHierarchy
This interface holds information about the subtyping relationships between kinds of qualifiers. A "kind" of qualifier is its annotation class and is represented by the QualifierKind class. If a type system has more than one hierarchy, information about all hierarchies is stored in this class.

The qualifier kind subtyping relationship may be an over-approximation of the qualifier subtyping relationship, for qualifiers that have elements/arguments. In other words, if a qualifier kind is a subtype of another qualifier kind, then qualifiers of those kinds may or may not be subtypes, depending on the values of any elements of the qualifiers. If qualifier kinds are not subtypes, then qualifiers of those kinds are never subtypes.

This interface is used by NoElementQualifierHierarchy and ElementQualifierHierarchy (but not MostlyNoElementQualifierHierarchy) to implement methods that compare AnnotationMirrors, such as QualifierHierarchy.isSubtype(AnnotationMirror, AnnotationMirror).

See Also:
  • Method Details

    • getTops

      Set<? extends QualifierKind> getTops()
      Returns the qualifier kinds that are the top qualifier in their hierarchies.
      Returns:
      the qualifier kinds that are the top qualifier in their hierarchies
    • getBottoms

      Set<? extends QualifierKind> getBottoms()
      Returns the qualifier kinds that are the bottom qualifier in their hierarchies.
      Returns:
      the qualifier kinds that are the bottom qualifier in their hierarchies
    • leastUpperBound

      Returns the least upper bound of q1 and q2, or null if the qualifier kinds are not in the same hierarchy. Ignores elements/arguments (as QualifierKind always does).
      Parameters:
      q1 - a qualifier kind
      q2 - a qualifier kind
      Returns:
      the least upper bound of q1 and q2, or null if the qualifier kinds are not in the same hierarchy
    • greatestLowerBound

      @Nullable QualifierKind greatestLowerBound(QualifierKind q1, QualifierKind q2)
      Returns the greatest lower bound of q1 and q2, or null if the qualifier kinds are not in the same hierarchy. Ignores elements/arguments (as QualifierKind always does).
      Parameters:
      q1 - a qualifier kind
      q2 - a qualifier kind
      Returns:
      the greatest lower bound of q1 and q2, or null if the qualifier kinds are not in the same hierarchy
    • allQualifierKinds

      List<? extends QualifierKind> allQualifierKinds()
      Returns a list of all QualifierKinds sorted in ascending order.
      Returns:
      a list of all QualifierKinds sorted in ascending order
    • getQualifierKind

      QualifierKind getQualifierKind(@CanonicalName String name)
      Returns the QualifierKind for the given annotation class name. Throws an exception if one does not exist.
      Parameters:
      name - canonical name of an annotation class
      Returns:
      the QualifierKind for the given annotation class name
    • annotationClassName

      static @CanonicalName String annotationClassName(Class<? extends Annotation> clazz)
      Returns the canonical name of clazz. Throws a TypeSystemError if clazz is anonymous or otherwise does not have a name.
      Parameters:
      clazz - annotation class
      Returns:
      the canonical name of clazz