blob: 081a12f2d1a5566c19c2ee1cc25edd83b4320881 [file] [log] [blame]
// 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>());
}
}