| import org.checkerframework.framework.testchecker.util.*; |
| |
| /* |
| * See Issue 137: |
| * https://github.com/typetools/checker-framework/issues/137 |
| */ |
| public 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) |
| @Odd B<A> i1 = i; |
| // :: error: (assignment) |
| @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) |
| @Odd B<? extends A> i1 = i; |
| // :: error: (assignment) |
| @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; |
| } |
| } |