Class ValueAnnotatedTypeFactory

    • Field Detail

      • MAX_VALUES

        protected static final int MAX_VALUES
        The maximum number of values allowed in an annotation's array.
        See Also:
        Constant Field Values
      • UNKNOWNVAL

        protected final javax.lang.model.element.AnnotationMirror UNKNOWNVAL
        The top type for this hierarchy.
      • BOTTOMVAL

        protected final javax.lang.model.element.AnnotationMirror BOTTOMVAL
        The bottom type for this hierarchy.
      • POLY

        public final javax.lang.model.element.AnnotationMirror POLY
        The canonical @PolyValue annotation.
      • BOOLEAN_TRUE

        public final javax.lang.model.element.AnnotationMirror BOOLEAN_TRUE
        The canonical @BoolVal(true) annotation.
      • BOOLEAN_FALSE

        public final javax.lang.model.element.AnnotationMirror BOOLEAN_FALSE
        The canonical @BoolVal(false) annotation.
      • arrayLenValueElement

        protected final javax.lang.model.element.ExecutableElement arrayLenValueElement
        The value() element/field of an @ArrayLen annotation.
      • arrayLenRangeFromElement

        protected final javax.lang.model.element.ExecutableElement arrayLenRangeFromElement
        The from() element/field of an @ArrayLenRange annotation.
      • arrayLenRangeToElement

        protected final javax.lang.model.element.ExecutableElement arrayLenRangeToElement
        The to() element/field of an @ArrayLenRange annotation.
      • boolValValueElement

        protected final javax.lang.model.element.ExecutableElement boolValValueElement
        The value() element/field of a @BoolVal annotation.
      • doubleValValueElement

        protected final javax.lang.model.element.ExecutableElement doubleValValueElement
        The value() element/field of a @DoubleVal annotation.
      • intRangeFromElement

        protected final javax.lang.model.element.ExecutableElement intRangeFromElement
        The from() element/field of an @IntRange annotation.
      • intRangeToElement

        protected final javax.lang.model.element.ExecutableElement intRangeToElement
        The to() element/field of an @IntRange annotation.
      • intValValueElement

        protected final javax.lang.model.element.ExecutableElement intValValueElement
        The value() element/field of a @IntVal annotation.
      • matchesRegexValueElement

        public final javax.lang.model.element.ExecutableElement matchesRegexValueElement
        The value() element/field of a @MatchesRegex annotation.
      • doesNotMatchRegexValueElement

        public final javax.lang.model.element.ExecutableElement doesNotMatchRegexValueElement
        The value() element/field of a @DoesNotMatchRegex annotation.
      • minLenValueElement

        protected final javax.lang.model.element.ExecutableElement minLenValueElement
        The value() element/field of a @MinLen annotation.
      • minLenFieldInvariantFieldElement

        protected final javax.lang.model.element.ExecutableElement minLenFieldInvariantFieldElement
        The field() element/field of a @MinLenFieldInvariant annotation.
      • minLenFieldInvariantMinLenElement

        protected final javax.lang.model.element.ExecutableElement minLenFieldInvariantMinLenElement
        The minLen() element/field of a @MinLenFieldInvariant annotation.
      • stringValValueElement

        public final javax.lang.model.element.ExecutableElement stringValValueElement
        The value() element/field of a @StringVal annotation.
      • evaluator

        protected final ReflectiveEvaluator evaluator
        Helper class that evaluates statically executable methods, constructors, and fields.
    • Constructor Detail

      • ValueAnnotatedTypeFactory

        public ValueAnnotatedTypeFactory​(BaseTypeChecker checker)
    • Method Detail

      • canonicalAnnotation

        public javax.lang.model.element.AnnotationMirror canonicalAnnotation​(javax.lang.model.element.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 java.util.Set<java.lang.Class<? extends java.lang.annotation.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
      • 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
      • getFieldInvariantDeclarationAnnotations

        protected java.util.Set<java.lang.Class<? extends java.lang.annotation.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
      • getWidenedAnnotations

        public AnnotationMirrorSet getWidenedAnnotations​(AnnotationMirrorSet annos,
                                                         javax.lang.model.type.TypeKind typeKind,
                                                         javax.lang.model.type.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​(javax.lang.model.element.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​(javax.lang.model.element.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​(javax.lang.model.element.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​(javax.lang.model.element.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​(javax.lang.model.element.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​(javax.lang.model.element.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​(javax.lang.model.element.AnnotationMirror anno)
        Gets the value() element/field out of a MinLen annotation.
        Parameters:
        anno - a MinLen annotation
        Returns:
        its value() element/field
      • createIntValAnnotation

        public javax.lang.model.element.AnnotationMirror createIntValAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror convertIntRangeToIntVal​(javax.lang.model.element.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 javax.lang.model.element.AnnotationMirror createDoubleValAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createStringAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createArrayLenAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createBooleanAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createCharAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createDoubleAnnotation​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createNumberAnnotationMirror​(@Nullable java.util.List<java.lang.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 javax.lang.model.element.AnnotationMirror createIntRangeAnnotation​(Range range)
        Create an @IntRange or @IntVal annotation from the range. May return BOTTOMVAL or UNKNOWNVAL.
      • createArrayLenRangeAnnotation

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

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

        public javax.lang.model.element.AnnotationMirror createMatchesRegexAnnotation​(@Nullable java.util.List<@Regex java.lang.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 javax.lang.model.element.AnnotationMirror createDoesNotMatchRegexAnnotation​(@Nullable java.util.List<@Regex java.lang.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 javax.lang.model.element.AnnotationMirror convertArrayLenToArrayLenRange​(javax.lang.model.element.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 javax.lang.model.element.AnnotationMirror convertIntValToIntRange​(javax.lang.model.element.AnnotationMirror intValAnno)
        Converts an @IntVal annotation to an @IntRange annotation.
      • getRange

        public @Nullable Range getRange​(@Nullable javax.lang.model.element.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 java.util.List<java.lang.Long> getIntValues​(@PolyNull javax.lang.model.element.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 java.util.List<java.lang.Double> getDoubleValues​(@PolyNull javax.lang.model.element.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 java.util.List<java.lang.Integer> getArrayLength​(@PolyNull javax.lang.model.element.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 java.util.List<java.lang.Character> getCharValues​(@PolyNull javax.lang.model.element.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 java.lang.Boolean getBooleanValue​(@Nullable javax.lang.model.element.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(javax.lang.model.element.AnnotationMirror)
      • getBooleanValues

        public @Nullable java.util.List<java.lang.Boolean> getBooleanValues​(@Nullable javax.lang.model.element.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 java.util.List<java.lang.String> getStringValues​(@PolyNull javax.lang.model.element.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 java.util.List<java.lang.String> getMatchesRegexValues​(@PolyNull javax.lang.model.element.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 java.util.List<java.lang.String> getDoesNotMatchRegexValues​(@PolyNull javax.lang.model.element.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
      • getMaxLenValue

        public @Nullable java.lang.Integer getMaxLenValue​(@Nullable javax.lang.model.element.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 javax.lang.model.element.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 java.lang.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​(java.lang.String sequenceExpression,
                                       com.sun.source.tree.Tree tree,
                                       com.sun.source.util.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​(com.sun.source.tree.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​(javax.lang.model.type.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