Class SubtypeVisitHistory

java.lang.Object
org.checkerframework.framework.type.SubtypeVisitHistory

public class SubtypeVisitHistory extends Object
THIS CLASS IS DESIGNED FOR USE WITH DefaultTypeHierarchy, DefaultRawnessComparer, and StructuralEqualityComparer ONLY.

VisitHistory tracks triples of (type1, type2, top), where type1 is a subtype of type2. It does not track when type1 is not a subtype of type2; such entries are missing from the history. Clients of this class can check whether or not they have visited an equivalent pair of AnnotatedTypeMirrors already. This is necessary in order to halt visiting on recursive bounds.

This class is primarily used to implement isSubtype(ATM, ATM). The pair of types corresponds to the subtype and the supertype being checked. A single subtype may be visited more than once, but with a different supertype. For example, if the two types are @A T extends @B Serializable<T> and @C Serializable<?>, then isSubtype is first called one those types and then on @B Serializable<T> and @C Serializable<?>.

  • Constructor Details

    • SubtypeVisitHistory

      public SubtypeVisitHistory()
      Creates a new SubtypeVisitHistory.
  • Method Details

    • put

      public void put(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror currentTop, boolean isSubtype)
      Put a visit for type1, type2, and top in the history. Has no effect if isSubtype is false.
      Parameters:
      type1 - the first type
      type2 - the second type
      currentTop - the top of the relevant type hierarchy; only annotations from that hierarchy are considered
      isSubtype - whether type1 is a subtype of type2; if false, this method does nothing
    • remove

      public void remove(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror currentTop)
      Remove type1 and type2.
    • contains

      public boolean contains(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror currentTop)
      Returns true if type1 and type2 (or an equivalent pair) have been passed to the put method previously.
      Returns:
      true if an equivalent pair has already been added to the history
    • toString

      public String toString()
      Overrides:
      toString in class Object