blob: 6cd586d0eca5dc934b765e465a3c2a4e2210e7b7 [file] [log] [blame]
/*
* 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")
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 "";
}
}