import testlib.util.*; /* * See Issue 137: * https://github.com/typetools/checker-framework/issues/137 */ class GenericTest7 { interface A {} interface B<T> {} interface C<U> {} public <I extends B<A> & C<A>> void one(I i) { B<A> i1 = i; C<A> i2 = i; } public <I extends B<A> & C<A>> void oneA(I i) { //:: error: (assignment.type.incompatible) @Odd B<A> i1 = i; //:: error: (assignment.type.incompatible) @Odd C<A> i2 = i; } public <I extends @Odd B<A> & @Odd C<A>> void oneB(I i) { @Odd B<A> i1 = i; @Odd C<A> i2 = i; } public <I extends B<? extends A> & C<? extends A>> void two(I i) { B<? extends A> i1 = i; C<? extends A> i2 = i; } public <I extends B<? extends A> & C<? extends A>> void twoA(I i) { //:: error: (assignment.type.incompatible) @Odd B<? extends A> i1 = i; //:: error: (assignment.type.incompatible) @Odd C<? extends A> i2 = i; } public <I extends @Odd B<? extends A> & @Odd C<? extends A>> void twoB(I i) { @Odd B<? extends A> i1 = i; @Odd C<? extends A> i2 = i; } public <I extends B<? extends @Odd A> & C<? extends @Odd A>> void twoC(I i) { B<? extends A> i1 = i; C<? extends A> i2 = i; B<? extends @Odd A> i3 = i; C<? extends @Odd A> i4 = i; } }