Class CFAbstractValue.AnnotationSetCombiner

java.lang.Object
org.checkerframework.framework.flow.CFAbstractValue.AnnotationSetCombiner
Direct Known Subclasses:
CFAbstractValue.ValueGlb, CFAbstractValue.ValueLub
Enclosing class:
CFAbstractValue<V extends CFAbstractValue<V>>

protected abstract class CFAbstractValue.AnnotationSetCombiner extends Object
Combines two sets of AnnotationMirrors by hierarchy.

Subclasses must define how to combine sets by implementing the following methods:

  1. #combineTwoAnnotations(AnnotationMirror, AnnotationMirror, AnnotationMirror)
  2. #combineOneAnnotation(AnnotationMirror, AnnotatedTypeVariable, AnnotationMirror, boolean)
  3. #combineNoAnnotations(AnnotatedTypeVariable, AnnotatedTypeVariable, AnnotationMirror, boolean)
If a set is missing an annotation in a hierarchy, and if the combined set can be missing an annotation, then there must be a TypeVariable for the set that can be used to find annotations on its bounds.
  • Constructor Details

    • AnnotationSetCombiner

      protected AnnotationSetCombiner()
  • Method Details

    • combineSets

      protected AnnotationMirrorSet combineSets(TypeMirror aTypeMirror, AnnotationMirrorSet aSet, TypeMirror bTypeMirror, AnnotationMirrorSet bSet, boolean canCombinedSetBeMissingAnnos)
      Combines the two sets.
      Parameters:
      aTypeMirror - the type mirror associated with aSet
      aSet - a set of annotation mirrors
      bTypeMirror - the type mirror associated with bSet
      bSet - a set of annotation mirrors
      canCombinedSetBeMissingAnnos - whether or not the combined set can be missing annotations
      Returns:
      the combined sets
    • combineTwoAnnotations

      protected abstract @Nullable AnnotationMirror combineTwoAnnotations(AnnotationMirror a, AnnotationMirror b, AnnotationMirror top)
      Returns the result of combining the two annotations. This method is called when an annotation exists in both sets for the hierarchy whose top is top.
      Parameters:
      a - an annotation in the hierarchy
      b - an annotation in the hierarchy
      top - the top annotation in the hierarchy
      Returns:
      the result of combining the two annotations or null if no combination exists
    • combineNoAnnotations

      protected abstract @Nullable AnnotationMirror combineNoAnnotations(AnnotatedTypeMirror.AnnotatedTypeVariable aAtv, AnnotatedTypeMirror.AnnotatedTypeVariable bAtv, AnnotationMirror top, boolean canCombinedSetBeMissingAnnos)
      Returns the primary annotation that result from of combining the two AnnotatedTypeMirror.AnnotatedTypeVariable. If the result has not primary annotation, the null is returned. This method is called when no annotation exists in either sets for the hierarchy whose top is top.
      Parameters:
      aAtv - a type variable that does not have a primary annotation in top hierarchy
      bAtv - a type variable that does not have a primary annotation in top hierarchy
      top - the top annotation in the hierarchy
      canCombinedSetBeMissingAnnos - whether or not
      Returns:
      the result of combining the two type variables, which may be null
    • combineOneAnnotation

      protected abstract @Nullable AnnotationMirror combineOneAnnotation(AnnotationMirror annotation, AnnotatedTypeMirror.AnnotatedTypeVariable typeVar, AnnotationMirror top, boolean canCombinedSetBeMissingAnnos)
      Returns the result of combining annotation with typeVar.

      This is called when an annotation exists for the hierarchy in on set, but not the other.

      Parameters:
      annotation - an annotation
      typeVar - a type variable that does not have a primary annotation in the hierarchy
      top - the top annotation of the hierarchy
      canCombinedSetBeMissingAnnos - whether or not
      Returns:
      the result of combining annotation with typeVar