Class ValueAnnotatedTypeFactory

All Implemented Interfaces:
AnnotationProvider

public class ValueAnnotatedTypeFactory extends BaseAnnotatedTypeFactory
AnnotatedTypeFactory for the Value type system.
  • Field Details

  • Constructor Details

    • ValueAnnotatedTypeFactory

      public ValueAnnotatedTypeFactory(BaseTypeChecker checker)
  • Method Details

    • applyInferredAnnotations

      protected void applyInferredAnnotations(AnnotatedTypeMirror type, CFValue inferred)
      Description copied from class: GenericAnnotatedTypeFactory
      Applies the annotations inferred by the org.checkerframework.dataflow analysis to the type type.
      Overrides:
      applyInferredAnnotations in class GenericAnnotatedTypeFactory<CFValue,CFStore,CFTransfer,CFAnalysis>
      Parameters:
      type - the type to modify
      inferred - the inferred annotations to apply
    • canonicalAnnotation

      public AnnotationMirror canonicalAnnotation(AnnotationMirror anno)
      Description copied from class: AnnotatedTypeFactory
      Returns the canonical annotation for the passed annotation. Returns null if the passed annotation is not an alias of a canonical one in the framework.

      A canonical annotation is the internal annotation that will be used by the Checker Framework in the aliased annotation's place.

      Overrides:
      canonicalAnnotation in class AnnotatedTypeFactory
      Parameters:
      anno - the qualifier to check for an alias
      Returns:
      the canonical annotation, or null if none exists
    • createSupportedTypeQualifiers

      protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers()
      Description copied from class: AnnotatedTypeFactory
      Returns a mutable set of annotation classes that are supported by a checker.

      Subclasses may override this method to return a mutable set of their supported type qualifiers through one of the 5 approaches shown below.

      Subclasses should not call this method; they should call AnnotatedTypeFactory.getSupportedTypeQualifiers() instead.

      By default, a checker supports all annotations located in a subdirectory called qual that's located in the same directory as the checker. Note that only annotations defined with the @Target({ElementType.TYPE_USE}) meta-annotation (and optionally with the additional value of ElementType.TYPE_PARAMETER, but no other ElementType values) are automatically considered as supported annotations.

      To support a different set of annotations than those in the qual subdirectory, or that have other ElementType values, see examples below.

      In total, there are 5 ways to indicate annotations that are supported by a checker:

      1. Only support annotations located in a checker's qual directory:

        This is the default behavior. Simply place those annotations within the qual directory.

      2. Support annotations located in a checker's qual directory and a list of other annotations:

        Place those annotations within the qual directory, and override AnnotatedTypeFactory.createSupportedTypeQualifiers() by calling AnnotatedTypeFactory.getBundledTypeQualifiers(Class...) with a varargs parameter list of the other annotations. Code example:

         @Override protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() {
              return getBundledTypeQualifiers(Regex.class, PartialRegex.class, RegexBottom.class, UnknownRegex.class);
          } 
         
      3. Supporting only annotations that are explicitly listed: Override AnnotatedTypeFactory.createSupportedTypeQualifiers() and return a mutable set of the supported annotations. Code example:
         @Override protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() {
              return new HashSet<Class<? extends Annotation>>(
                      Arrays.asList(A.class, B.class));
          } 
         
        The set of qualifiers returned by AnnotatedTypeFactory.createSupportedTypeQualifiers() must be a fresh, mutable set. The methods AnnotatedTypeFactory.getBundledTypeQualifiers(Class...) must return a fresh, mutable set
      Overrides:
      createSupportedTypeQualifiers in class AnnotatedTypeFactory
      Returns:
      the type qualifiers supported this processor, or an empty set if none
    • createFlowTransferFunction

      public CFTransfer createFlowTransferFunction(CFAbstractAnalysis<CFValue,CFStore,CFTransfer> analysis)
      Description copied from class: GenericAnnotatedTypeFactory
      Returns the appropriate transfer function that is used for the given org.checkerframework.dataflow analysis.

      This implementation uses the checker naming convention to create the appropriate transfer function. If no transfer function is found, it returns an instance of CFTransfer.

      Subclasses have to override this method to create the appropriate transfer function if they do not follow the checker naming convention.

      Overrides:
      createFlowTransferFunction in class GenericAnnotatedTypeFactory<CFValue,CFStore,CFTransfer,CFAnalysis>
      Parameters:
      analysis - a dataflow analysis
      Returns:
      a new transfer function
    • createQualifierHierarchy

      protected QualifierHierarchy createQualifierHierarchy()
      Description copied from class: AnnotatedTypeFactory
      Returns the QualifierHierarchy to be used by this checker.

      The implementation builds the type qualifier hierarchy for the AnnotatedTypeFactory.getSupportedTypeQualifiers() using the meta-annotations found in them. The current implementation returns an instance of NoElementQualifierHierarchy.

      Subclasses must override this method if their qualifiers have elements; the method must return an implementation of QualifierHierarchy, such as ElementQualifierHierarchy.

      Overrides:
      createQualifierHierarchy in class AnnotatedTypeFactory
      Returns:
      a QualifierHierarchy for this type system
    • createTypeHierarchy

      protected TypeHierarchy createTypeHierarchy()
      Description copied from class: AnnotatedTypeFactory
      Creates the type hierarchy to be used by this factory.

      Subclasses may override this method to specify new type-checking rules beyond the typical Java subtyping rules.

      Overrides:
      createTypeHierarchy in class AnnotatedTypeFactory
      Returns:
      the type relations class to check type subtyping
    • createTypeAnnotator

      protected TypeAnnotator createTypeAnnotator()
      Description copied from class: GenericAnnotatedTypeFactory
      Returns a DefaultForTypeAnnotator that adds annotations to a type based on the content of the type itself.

      Subclass may override this method. The default type annotator is a ListTypeAnnotator of the following:

      1. IrrelevantTypeAnnotator: Adds top to types not listed in the @RelevantJavaTypes annotation on the checker.
      2. PropagationTypeAnnotator: Propagates annotation onto wildcards.
      Overrides:
      createTypeAnnotator in class GenericAnnotatedTypeFactory<CFValue,CFStore,CFTransfer,CFAnalysis>
      Returns:
      a type annotator
    • getFieldInvariants

      public @Nullable FieldInvariants getFieldInvariants(TypeElement element)
      Description copied from class: AnnotatedTypeFactory
      Returns the field invariants for the given class, as expressed by the user in @FieldInvariant method annotations.

      Subclasses may implement their own field invariant annotations if @FieldInvariant is not expressive enough. They must override this method to properly create AnnotationMirror and also override AnnotatedTypeFactory.getFieldInvariantDeclarationAnnotations() to return their field invariants.

      Overrides:
      getFieldInvariants in class AnnotatedTypeFactory
      Parameters:
      element - class for which to get invariants
      Returns:
      field invariants for element
    • getFieldInvariantDeclarationAnnotations

      protected Set<Class<? extends Annotation>> getFieldInvariantDeclarationAnnotations()
      Description copied from class: AnnotatedTypeFactory
      Returns the set of classes of field invariant annotations.
      Overrides:
      getFieldInvariantDeclarationAnnotations in class AnnotatedTypeFactory
      Returns:
      the set of classes of field invariant annotations
    • methodFromUse

      protected AnnotatedTypeFactory.ParameterizedExecutableType methodFromUse(ExpressionTree tree, ExecutableElement methodElt, AnnotatedTypeMirror receiverType, boolean inferTypeArgs)
      Creates array length annotations for the result of the Enum.values() method, which is the number of possible values of the enum.
      Overrides:
      methodFromUse in class AnnotatedTypeFactory
      Parameters:
      tree - either a MethodInvocationTree or a MemberReferenceTree
      methodElt - the element of the referenced method
      receiverType - the type of the receiver
      inferTypeArgs - whether type arguments should be inferred
      Returns:
      the type of the invoked method
    • getWidenedAnnotations

      public AnnotationMirrorSet getWidenedAnnotations(AnnotationMirrorSet annos, TypeKind typeKind, TypeKind widenedTypeKind)
      Description copied from class: AnnotatedTypeFactory
      Returns annotations applicable to type widenedTypeKind, that are copied or adapted from annos.
      Overrides:
      getWidenedAnnotations in class AnnotatedTypeFactory
      Parameters:
      annos - annotations to widen, from a primitive or boxed primitive
      typeKind - primitive type to widen
      widenedTypeKind - target for the returned annotations; a primitive type that is wider than typeKind (in the sense of JLS 5.1.2)
      Returns:
      result of converting annos from typeKind to widenedTypeKind
    • getFromValueFromIntRange

      public long getFromValueFromIntRange(AnnotatedTypeMirror atm)
      Finds the appropriate value for the from value of an annotated type mirror containing an IntRange annotation.
      Parameters:
      atm - an annotated type mirror that contains an IntRange annotation
      Returns:
      either the from value from the passed int range annotation, or the minimum value of the domain of the underlying type (i.e. Integer.MIN_VALUE if the underlying type is int)
    • getToValueFromIntRange

      public long getToValueFromIntRange(AnnotatedTypeMirror atm)
      Finds the appropriate value for the to value of an annotated type mirror containing an IntRange annotation.
      Parameters:
      atm - an annotated type mirror that contains an IntRange annotation
      Returns:
      either the to value from the passed int range annotation, or the maximum value of the domain of the underlying type (i.e. Integer.MAX_VALUE if the underlying type is int)
    • getIntRangeFromValue

      protected long getIntRangeFromValue(AnnotationMirror intRangeAnno)
      Gets the from() element/field out of an IntRange annotation. The from() element/field must exist. Clients should call getFromValueFromIntRange(org.checkerframework.framework.type.AnnotatedTypeMirror) if it might not exist.
      Parameters:
      intRangeAnno - an IntRange annotation
      Returns:
      its from() element/field
    • getIntRangeFromValue

      protected long getIntRangeFromValue(AnnotationMirror intRangeAnno, long defaultValue)
      Gets the from() element/field out of an IntRange annotation. The from() element/field must exist. Clients should call getFromValueFromIntRange(org.checkerframework.framework.type.AnnotatedTypeMirror) if it might not exist.
      Parameters:
      intRangeAnno - an IntRange annotation
      defaultValue - the value to return if there is no from() element/field
      Returns:
      its from() element/field
    • getIntRangeToValue

      protected long getIntRangeToValue(AnnotationMirror intRangeAnno, long defaultValue)
      Gets the to() element/field out of an IntRange annotation. The to() element/field must exist. Clients should call getToValueFromIntRange(org.checkerframework.framework.type.AnnotatedTypeMirror) if it might not exist.
      Parameters:
      intRangeAnno - an IntRange annotation
      defaultValue - the value to retur if there is no to() element/field
      Returns:
      its to() element/field
    • getIntRangeToValue

      protected long getIntRangeToValue(AnnotationMirror intRangeAnno)
      Gets the to() element/field out of an IntRange annotation. The to() element/field must exist. Clients should call getToValueFromIntRange(org.checkerframework.framework.type.AnnotatedTypeMirror) if it might not exist.
      Parameters:
      intRangeAnno - an IntRange annotation
      Returns:
      its to() element/field
    • getArrayLenRangeFromValue

      protected int getArrayLenRangeFromValue(AnnotationMirror anno)
      Gets the from() element/field out of an ArrayLenRange annotation.
      Parameters:
      anno - an ArrayLenRange annotation
      Returns:
      its from() element/field
    • getArrayLenRangeToValue

      protected int getArrayLenRangeToValue(AnnotationMirror anno)
      Gets the to() element/field out of an ArrayLenRange annotation.
      Parameters:
      anno - an ArrayLenRange annotation
      Returns:
      its to() element/field
    • getMinLenValueValue

      protected int getMinLenValueValue(AnnotationMirror anno)
      Gets the value() element/field out of a MinLen annotation.
      Parameters:
      anno - a MinLen annotation
      Returns:
      its value() element/field
    • createTreeAnnotator

      protected TreeAnnotator createTreeAnnotator()
      Description copied from class: GenericAnnotatedTypeFactory
      Returns a TreeAnnotator that adds annotations to a type based on the contents of a tree.

      The default tree annotator is a ListTreeAnnotator of the following:

      1. PropagationTreeAnnotator: Propagates annotations from subtrees
      2. LiteralTreeAnnotator: Adds annotations based on QualifierForLiterals meta-annotations
      3. DependentTypesTreeAnnotator: Adapts dependent annotations based on context

      Subclasses may override this method to specify additional tree annotators, for example:

       new ListTreeAnnotator(super.createTreeAnnotator(), new KeyLookupTreeAnnotator(this));
       
      Overrides:
      createTreeAnnotator in class GenericAnnotatedTypeFactory<CFValue,CFStore,CFTransfer,CFAnalysis>
      Returns:
      a tree annotator
    • createIntValAnnotation

      public AnnotationMirror createIntValAnnotation(@Nullable List<Long> values)
      Returns a IntVal or IntRange annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. If the number of values is greater than MAX_VALUES, return an IntRange. In other cases, the values are sorted and duplicates are removed before an IntVal is created.
      Parameters:
      values - list of longs; duplicates are allowed and the values may be in any order
      Returns:
      an annotation depends on the values
    • convertIntRangeToIntVal

      public AnnotationMirror convertIntRangeToIntVal(AnnotationMirror intRangeAnno)
      Convert an @IntRange annotation to an @IntVal annotation, or to UNKNOWNVAL if the input is too wide to be represented as an @IntVal.
      Parameters:
      intRangeAnno - an @IntRange annotation
      Returns:
      an @IntVal annotation corresponding to the argument
    • createDoubleValAnnotation

      public AnnotationMirror createDoubleValAnnotation(@Nullable List<Double> values)
      Returns a DoubleVal annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created.
      Parameters:
      values - list of doubles; duplicates are allowed and the values may be in any order
      Returns:
      a DoubleVal annotation using the values
    • createStringAnnotation

      public AnnotationMirror createStringAnnotation(@Nullable List<String> values)
      Returns a StringVal annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created. If values is larger than the max number of values allowed (10 by default), then an ArrayLen or an ArrayLenRange annotation is returned.
      Parameters:
      values - list of strings; duplicates are allowed and the values may be in any order
      Returns:
      a StringVal annotation using the values
    • createArrayLenAnnotation

      public AnnotationMirror createArrayLenAnnotation(@Nullable List<Integer> values)
      Returns a ArrayLen annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created. If values is larger than the max number of values allowed (10 by default), then an ArrayLenRange annotation is returned.
      Parameters:
      values - list of integers; duplicates are allowed and the values may be in any order
      Returns:
      a ArrayLen annotation using the values
    • createBooleanAnnotation

      public AnnotationMirror createBooleanAnnotation(@Nullable List<Boolean> values)
      Returns a BoolVal annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created.
      Parameters:
      values - list of booleans; duplicates are allowed and the values may be in any order
      Returns:
      a BoolVal annotation using the values
    • createCharAnnotation

      public AnnotationMirror createCharAnnotation(@Nullable List<Character> values)
      Returns a IntVal annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created.
      Parameters:
      values - list of characters; duplicates are allowed and the values may be in any order
      Returns:
      a IntVal annotation using the values
    • createDoubleAnnotation

      public AnnotationMirror createDoubleAnnotation(@Nullable List<Double> values)
      Returns a DoubleVal annotation using the values. If values is null, then UnknownVal is returned; if values is empty, then bottom is returned. The values are sorted and duplicates are removed before the annotation is created.
      Parameters:
      values - list of doubleacters; duplicates are allowed and the values may be in any order
      Returns:
      a IntVal annotation using the values
    • createNumberAnnotationMirror

      public AnnotationMirror createNumberAnnotationMirror(@Nullable List<Number> values)
      Returns an annotation that represents the given set of values.
      Parameters:
      values - a homogeneous list: every element of it has the same class. This method does not modify or store it.
      Returns:
      an annotation that represents the given set of values
    • createIntRangeAnnotation

      public AnnotationMirror createIntRangeAnnotation(Range range)
      Create an @IntRange or @IntVal annotation from the range. May return BOTTOMVAL or UNKNOWNVAL.
    • createArrayLenRangeAnnotation

      public AnnotationMirror createArrayLenRangeAnnotation(int from, int to)
      Create an @ArrayLenRange annotation from the two (inclusive) bounds. Does not return BOTTOMVAL or UNKNOWNVAL.
    • createArrayLenRangeAnnotation

      public AnnotationMirror createArrayLenRangeAnnotation(Range range)
      Create an @ArrayLenRange annotation from the range. May return BOTTOMVAL or UNKNOWNVAL.
    • createMatchesRegexAnnotation

      public AnnotationMirror createMatchesRegexAnnotation(@Nullable List<@Regex String> regexes)
      Creates an MatchesRegex annotation for the given regular expressions.
      Parameters:
      regexes - a list of Java regular expressions
      Returns:
      a MatchesRegex annotation with those values
    • createDoesNotMatchRegexAnnotation

      public AnnotationMirror createDoesNotMatchRegexAnnotation(@Nullable List<@Regex String> regexes)
      Creates an DoesNotMatchRegex annotation for the given regular expressions.
      Parameters:
      regexes - a list of Java regular expressions
      Returns:
      a DoesNotMatchRegex annotation with those values
    • convertArrayLenToArrayLenRange

      public AnnotationMirror convertArrayLenToArrayLenRange(AnnotationMirror arrayLenAnno)
      Converts an @ArrayLen annotation to an @ArrayLenRange annotation.
      Parameters:
      arrayLenAnno - an ArrayLen annotation
      Returns:
      an ArrayLenRange annotation representing the bounds of the given ArrayLen annotation
    • convertIntValToIntRange

      public AnnotationMirror convertIntValToIntRange(AnnotationMirror intValAnno)
      Converts an @IntVal annotation to an @IntRange annotation.
    • getRange

      public @Nullable Range getRange(@Nullable AnnotationMirror rangeAnno)
      Returns a Range bounded by the values specified in the given @Range annotation. Also returns an appropriate range if an @IntVal annotation is passed. Returns null if the annotation is null or if the annotation is not an IntRange, IntRangeFromPositive, IntVal, or ArrayLenRange.
      Parameters:
      rangeAnno - a @Range annotation
      Returns:
      the Range that the annotation represents
    • getIntValues

      public @PolyNull List<Long> getIntValues(@PolyNull AnnotationMirror intAnno)
      Returns the set of possible values as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.

      The method returns a list of Long but is named getIntValues because it supports the @IntVal annotation.

      Parameters:
      intAnno - an @IntVal annotation, or null
      Returns:
      the possible values, deduplicated and sorted
    • getDoubleValues

      public @PolyNull List<Double> getDoubleValues(@PolyNull AnnotationMirror doubleAnno)
      Returns the set of possible values as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.
      Parameters:
      doubleAnno - a @DoubleVal annotation, or null
      Returns:
      the possible values, deduplicated and sorted
    • getArrayLength

      public @PolyNull List<Integer> getArrayLength(@PolyNull AnnotationMirror arrayAnno)
      Returns the set of possible array lengths as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.
      Parameters:
      arrayAnno - an @ArrayLen annotation, or null
      Returns:
      the possible array lengths, deduplicated and sorted
    • getCharValues

      public @PolyNull List<Character> getCharValues(@PolyNull AnnotationMirror intAnno)
      Returns the set of possible values as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.
      Parameters:
      intAnno - an @IntVal annotation, or null
      Returns:
      the values represented by the given @IntVal annotation
    • getBooleanValue

      public @Nullable Boolean getBooleanValue(@Nullable AnnotationMirror boolAnno)
      Returns the single possible boolean value, or null if there is not exactly one possible value.
      Parameters:
      boolAnno - a @BoolVal annotation, or null
      Returns:
      the single possible boolean value, on null if that is not the case
      See Also:
    • getBooleanValues

      public @Nullable List<Boolean> getBooleanValues(@Nullable AnnotationMirror boolAnno)
      Returns the set of possible boolean values as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.
      Parameters:
      boolAnno - a @BoolVal annotation, or null
      Returns:
      a singleton or empty list of possible boolean values, or null
    • getStringValues

      public @PolyNull List<String> getStringValues(@PolyNull AnnotationMirror stringAnno)
      Returns the set of possible values as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no constant-value annotation so the argument is null.
      Parameters:
      stringAnno - a @StringVal annotation, or null
      Returns:
      the possible values, deduplicated and sorted
    • getMatchesRegexValues

      public @PolyNull List<String> getMatchesRegexValues(@PolyNull AnnotationMirror matchesRegexAnno)
      Returns the set of possible regexes as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no @MatchesRegex annotation so the argument is null.
      Parameters:
      matchesRegexAnno - a @MatchesRegex annotation, or null
      Returns:
      the possible values, deduplicated and sorted
    • getDoesNotMatchRegexValues

      public @PolyNull List<String> getDoesNotMatchRegexValues(@PolyNull AnnotationMirror doesNotMatchRegexAnno)
      Returns the set of possible regexes as a sorted list with no duplicate values. Returns the empty list if no values are possible (for dead code). Returns null if any value is possible -- that is, if no estimate can be made -- and this includes when there is no @DoesNotMatchRegex annotation so the argument is null.
      Parameters:
      doesNotMatchRegexAnno - a @DoesNotMatchRegex annotation, or null
      Returns:
      the possible values, deduplicated and sorted
    • isIntRange

      public boolean isIntRange(AnnotationMirrorSet anmSet)
      Returns true if isIntRange(AnnotationMirror) returns true for any annotation in the given set.
      Parameters:
      anmSet - a set of annotations
      Returns:
      true if any annotation is IntRange or related
    • isIntRange

      public boolean isIntRange(AnnotationMirror anno)
      Parameters:
      anno - annotation mirror
      Returns:
      true if anno is an IntRange, IntRangeFromPositive, IntRangeFromNonNegative, or IntRangeFromGTENegativeOne
    • getMinLenValue

      public int getMinLenValue(AnnotatedTypeMirror atm)
    • getMaxLenValue

      public @Nullable Integer getMaxLenValue(@Nullable AnnotationMirror annotation)
      Used to find the maximum length of an array. Returns null if there is no minimum length known, or if the passed annotation is null.
    • getMinLenValue

      public int getMinLenValue(@Nullable AnnotationMirror annotation)
      Used to find the minimum length of an array, which is useful for array bounds checking. Returns 0 if there is no minimum length known, or if the passed annotation is null.

      Note that this routine handles actual MinLen annotations, because it is called by canonicalAnnotation(AnnotationMirror), which transforms MinLen annotations into ArrayLenRange annotations.

    • getMinLenValue

      public int getMinLenValue(AnnotationMirrorSet annotations)
      Returns the minimum length of an array.
      Parameters:
      annotations - the annotations on the array expression
      Returns:
      the minimum length of an array
    • getMinimumIntegralValue

      public @Nullable Long getMinimumIntegralValue(AnnotatedTypeMirror atm)
      Returns the smallest possible value that an integral annotation might take on. The passed AnnotatedTypeMirror should contain either an @IntRange annotation or an @IntVal annotation. Returns null if it does not.
      Parameters:
      atm - annotated type
      Returns:
      the smallest possible integral for which the atm could be the type
    • getMinLenFromString

      public int getMinLenFromString(String sequenceExpression, Tree tree, TreePath currentPath)
      Returns the minimum length of an array expression or 0 if the min length is unknown.
      Parameters:
      sequenceExpression - a Java expression
      tree - expression tree or variable declaration
      currentPath - path to local scope
      Returns:
      min length of sequenceExpression or 0
    • getDummyAssignedTo

      public @Nullable AnnotatedTypeMirror getDummyAssignedTo(ExpressionTree expressionTree)
      Returns the annotation type mirror for the type of expressionTree with default annotations applied.
      Overrides:
      getDummyAssignedTo in class AnnotatedTypeFactory
      Parameters:
      expressionTree - an expression which has no assignment context and for which type arguments need to be inferred
      Returns:
      null or an annotated type mirror that inferrence should pretend expressionTree is assigned to
    • isImmutable

      public boolean isImmutable(TypeMirror type)
      A fact about an array, such as its length, cannot be changed via side effects to the array.
      Overrides:
      isImmutable in class AnnotatedTypeFactory
      Parameters:
      type - type to test
      Returns:
      true if the type is immutable