File: GenericCrazyBounds.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (87 lines) | stat: -rw-r--r-- 1,579 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
/*
 * This class is solely to set up complicated recursive bounds in order to ensure that the
 * bounds initializer creates bounds with the right structure
 */

interface MyList<ZZ> {
    ZZ getZZ();

    void setZZ(ZZ ZZ);
}

interface MyMap<K, V> {
    K getK();

    V getV();

    void setK(K k);

    void setV(V v);
}

class MyRec<E extends MyList<E>> {}

class RecMyList extends MyRec<RecMyList> implements MyList<RecMyList> {
    @SuppressWarnings("return.type.incompatible")
    public RecMyList getZZ() {
        return null;
    }

    public void setZZ(RecMyList rl) {
        return;
    }
}

class Context2 {

    <T extends MyRec<? extends T> & MyList<T>> void main() {}

    void context() {
        this.<RecMyList>main();
    }
}

interface Rec<T extends Rec<T>> {}

class MyRec2<E extends Rec<? extends E>> {}

class RecImpl implements Rec<RecImpl> {}

class SubRec extends RecImpl {}

class CrazyGen2<TT extends MyList<EE>, EE extends MyMap<TT, TT>> {
    TT t2;
    EE e2;

    public CrazyGen2(TT t2, EE e2) {
        this.t2 = t2;
        this.e2 = e2;
    }

    public void context() {
        t2.setZZ(e2);
        e2.setK(t2.getZZ().getK());
    }
}

class CrazyGen3<TTT extends MyList<TTT>, EEE extends MyMap<TTT, TTT>> {
    TTT t3;
    EEE e3;

    public CrazyGen3(TTT t3, EEE e3) {
        this.t3 = t3;
        this.e3 = e3;
    }

    public void context() {
        e3.setK(t3);
        e3.setK(t3.getZZ());
    }
}

class MyClass {

    public <TV1 extends MyList<TV1>> String methodToPrint(TV1 tv1, int intParam) {
        return "";
    }
}