| // Test case for Issue 2302 |
| // https://github.com/typetools/checker-framework/issues/2302 |
| |
| @SuppressWarnings("unchecked") |
| public class Issue2302 { |
| static class StrangeConstructorTypeArgs<V> { |
| // The constructor does not use the type parameter V. |
| public StrangeConstructorTypeArgs(MyClass<byte[]> abs) {} |
| } |
| |
| static class MyClass<VALUE> {} |
| |
| static StrangeConstructorTypeArgs getStrangeConstructorTypeArgs() { |
| // Crash with the diamond operator. |
| // Type inference chooses `Object` as the type argument. |
| // That is a bug, since it should choose exactly `byte[]`. |
| return new StrangeConstructorTypeArgs(new MyClass<>()); |
| |
| // No crash with an explicit type argument (no diamond operator), no matter what it is. |
| // return new StrangeConstructorTypeArgs(new MyClass<byte[]>()); |
| // return new StrangeConstructorTypeArgs(new MyClass<Integer>()); |
| // return new StrangeConstructorTypeArgs(new MyClass<Object>()); |
| // return new StrangeConstructorTypeArgs(new MyClass<@Tainted Object>()); |
| } |
| } |