File: TestOpt.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 (75 lines) | stat: -rw-r--r-- 2,061 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
import org.checkerframework.checker.nullness.Opt;
import org.checkerframework.checker.nullness.qual.*;

/** Test class org.checkerframework.checker.nullness.Opt. */
class TestOpt {
    void foo1(@Nullable Object p) {
        if (Opt.isPresent(p)) {
            p.toString(); // Flow refinement
        }
    }

    void foo1b(@Nullable Object p) {
        if (!Opt.isPresent(p)) {
            // :: error: (dereference.of.nullable)
            p.toString();
        }
    }

    void foo2(@Nullable Object p) {
        Opt.ifPresent(p, x -> System.out.println("Got: " + x));
    }

    void foo2b(@Nullable Object p) {
        Opt.ifPresent(p, x -> System.out.println("Got: " + x.toString()));
    }

    void foo3(@Nullable Object p) {
        Object o = Opt.filter(p, x -> x.hashCode() > 10);
    }

    void foo4(@Nullable Object p) {
        String s = Opt.map(p, x -> x.toString());
    }

    void foo4b(@Nullable Object p) {
        // :: error: (argument.type.incompatible)
        String s = Opt.map(p, null);
    }

    void foo5(@Nullable Object p) {
        @NonNull Object o = Opt.orElse(p, new Object());
    }

    void foo5b(@Nullable Object p) {
        // :: error: (argument.type.incompatible)
        @NonNull Object o = Opt.orElse(p, null);
    }

    void foo6(@Nullable Object p) {
        @NonNull Object o = Opt.orElseGet(p, () -> new Object());
    }

    void foo6b(@Nullable Object p) {
        // :: error: (return.type.incompatible)
        @NonNull Object o = Opt.orElseGet(p, () -> null);
    }

    void foo7(Object p) {
        try {
            @NonNull Object o = Opt.orElseThrow(p, () -> new Throwable());
        } catch (Throwable t) {
            // p was null
        }
    }

    void foo7b(@Nullable Object p) {
        try {
            // :: error: (assignment.type.incompatible) :: error: (type.argument.type.incompatible)
            // :: error: (return.type.incompatible)
            @NonNull Object o = Opt.orElseThrow(p, () -> null);
        } catch (Throwable t) {
            // p was null
        }
    }
}