File: StringLen.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 22,840 kB
  • sloc: java: 145,910; xml: 839; sh: 518; makefile: 401; perl: 26
file content (112 lines) | stat: -rw-r--r-- 4,189 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import org.checkerframework.common.value.qual.ArrayLen;
import org.checkerframework.common.value.qual.ArrayLenRange;
import org.checkerframework.common.value.qual.IntRange;
import org.checkerframework.common.value.qual.IntVal;
import org.checkerframework.common.value.qual.MinLen;
import org.checkerframework.common.value.qual.StringVal;

class StringLen {
    void stringValArrayLen(
            @StringVal("") String empty,
            @StringVal("const") String constant,
            @StringVal({"s", "longconstant"}) String values,
            String unknown) {

        // Compatibility with ArrayLen
        @ArrayLen(0) String len0 = empty;
        @ArrayLen(5) String len5 = constant;
        @ArrayLen({1, 12}) String len1_12 = values;

        // Compatibility with ArrayLenRange
        @ArrayLenRange(from = 0, to = 0) String rng0 = empty;
        @ArrayLenRange(from = 5, to = 5) String rng5 = constant;
        @ArrayLenRange(from = 1, to = 12) String rng1_12 = values;

        // :: error: (assignment.type.incompatible)
        @ArrayLen(4) String len4 = constant;
        // :: error: (assignment.type.incompatible)
        @ArrayLenRange(from = 1, to = 11) String rng1_10 = values;
    }

    void stringValLubToArrayLen(
            boolean flag,
            @StringVal({"a", "b", "c", "d", "e"}) String ae,
            @StringVal({"f", "g", "h", "i", "j", "k"}) String fk,
            @StringVal({"ffff", "gggg", "hhhh", "iiii", "jjjj", "kkkkkkk"}) String fkR) {

        @ArrayLen(1) String ak = flag ? ae : fk;
        @ArrayLen({1, 4, 7}) String akR = flag ? ae : fkR;
    }

    void stringValLubToArrayLenRange(
            boolean flag,
            @StringVal({"a", "bb", "ccc", "dddd", "eeeee"}) String ae,
                    @StringVal({"ffffff", "ggggggg", "hhhhhhhh", "iiiiiiiii", "jjjjjjjjjj", "kkkkkkkkkkk"}) String fk) {

        @ArrayLenRange(from = 1, to = 11) String ak = flag ? ae : fk;
    }

    void arrayLenStringVal(
            @ArrayLen(0) String len0,
            @ArrayLenRange(from = 0, to = 0) String rng0,
            @ArrayLen({0, 1}) String nonEmpty) {
        @StringVal("") String emptyLen = len0;
        @StringVal("") String emptyRng = rng0;

        // :: error: (assignment.type.incompatible)
        @StringVal("") String emptyError = nonEmpty;
        // :: error: (assignment.type.incompatible)
        @StringVal("a") String nonEmptyError = nonEmpty;
    }

    void stringValLength(
            @StringVal("") String empty,
            @StringVal("const") String constant,
            @StringVal({"s", "longconstant"}) String values,
            String unknown) {

        @IntVal(0) int len0 = empty.length();
        @IntVal(5) int len5 = constant.length();
        @IntVal({1, 12}) int len1_12 = values.length();

        // :: error: (assignment.type.incompatible)
        @IntVal({1, 11}) int len1_11 = values.length();
    }

    void arrayLenLength(
            @ArrayLen(0) String empty,
            @ArrayLen(5) String constant,
            @ArrayLen({1, 12}) String values,
            String unknown) {

        @IntVal(0) int len0 = empty.length();
        @IntVal(5) int len5 = constant.length();
        @IntVal({1, 12}) int len1_12 = values.length();

        // :: error: (assignment.type.incompatible)
        @IntVal({1, 11}) int len1_11 = values.length();
    }

    void arrayLenRangeLength(
            @ArrayLenRange(from = 0, to = 0) String empty,
            @ArrayLenRange(from = 5, to = 5) String constant,
            @ArrayLenRange(from = 1, to = 12) String values,
            String unknown) {

        @IntRange(from = 0, to = 0) int len0 = empty.length();
        @IntRange(from = 5, to = 5) int len5 = constant.length();
        @IntRange(from = 1, to = 12) int len1_12 = values.length();

        // :: error: (assignment.type.incompatible)
        @IntRange(from = 1, to = 11) int len1_11 = values.length();
    }

    void minLenLength(@MinLen(5) String s) {
        @IntRange(from = 5) int l = s.length();
    }

    void arrayCast(@ArrayLen(1) String array) {
        @ArrayLen(1) String cast1 = (String) array;
        @ArrayLen(1) String cast2 = (@ArrayLen(1) String) array;
    }
}