Annotation Interface HasSubsequence
The annotated sequence contains a subsequence that is equal to the value of some other
expression. This annotation permits the Upper Bound Checker to translate indices for one sequence
into indices for the other sequence.
Consider the following example:
class IntSubArray {
@HasSubsequence(subsequence = "this", from = "this.start", to = "this.end")
int [] array;
@IndexFor("array") int start;
@IndexOrHigh("array") int end;
}
The above annotations mean that the value of an IntSubArray
object is equal to a
subsequence of its array
field.
These annotations imply the following relationships among @
IndexFor
annotations:
- If
i
is@IndexFor("this")
, thenthis.start + i
is@IndexFor("array")
. - If
j
is@IndexFor("array")
, thenj - this.start
is@IndexFor("this")
.
a
to array
, 4 facts need to be true:
start
is@NonNegative
.end
is@LTEqLengthOf("a")
.start
is@LessThan("end + 1")
.- the value of
this
equalsarray[start..end-1]
subsequence
field is equal
to the given subsequence and then suppress the warning.
For an example of how this annotation is used in practice, see the test GuavaPrimitives.java in /checker/tests/index/.
This annotation may only be written on fields.
- See the Checker Framework Manual:
- Index Checker
-
Required Element Summary
-
Element Details
-
subsequence
An expression that evaluates to the subsequence. -
from
The index into this where the subsequence starts. -
to
The index into this, immediately past where the subsequence ends.
-