File: Simple.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 (34 lines) | stat: -rw-r--r-- 938 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
import java.util.LinkedList;
import java.util.List;
import testlib.util.Encrypted;

abstract class BasicFunctionality {

    @Encrypted String encrypt(String s) {
        byte[] b = s.getBytes();
        for (int i = 0; i < b.length; b[i++]++) ;
        // :: warning: (cast.unsafe)
        return (@Encrypted String) new String(b);
    }

    abstract void sendOverTheInternet(@Encrypted String s);

    void test() {
        @Encrypted String s = encrypt("foo"); // valid
        sendOverTheInternet(s); // valid

        String t = encrypt("bar"); // valid (subtype)
        sendOverTheInternet(t); // valid (flow)

        List<@Encrypted String> lst = new LinkedList<>();
        lst.add(s);
        lst.add(t);

        for (@Encrypted String str : lst) {
            sendOverTheInternet(str);
        }

        //        for (String str : lst)
        //            sendOverTheInternet(str);           // should be valid!
    }
}