File: WellformedBounds.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 (39 lines) | stat: -rw-r--r-- 1,088 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
import org.checkerframework.checker.nullness.qual.*;

// Field f needs to be set, b/c the upper bound is @Initialized
// :: error: (initialization.fields.uninitialized)
class Param<T extends @NonNull Object> {
    T f;

    void foo() {
        // Valid, because upper bound is @Initialized @NonNull
        f.toString();
    }
}

// :: error: (type.argument.type.incompatible)
class Invalid<S extends Param<@Nullable Object>> {
    void bar(S s) {
        s.foo();
    }

    // :: error: (type.argument.type.incompatible)
    <M extends Param<@Nullable Object>> void foobar(M p) {}
}

interface ParamI<T extends @NonNull Object> {}

class Invalid2<
        S extends
                Number &
                        // :: error: (type.argument.type.incompatible)
                        ParamI<@Nullable Object>> {}

class Invalid3 {
    <
                    M extends
                            Number &
                                    // :: error: (type.argument.type.incompatible)
                                    ParamI<@Nullable Object>>
            void foobar(M p) {}
}