1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
// Code to test that LUB of two AnnotatedTypeMirror does not crash.
// See Issue 643
// https://github.com/typetools/checker-framework/issues/643
import java.io.Serializable;
import java.util.List;
public class ConditionalExpressions {
public static boolean flag = true;
class TypeVarTypeVar {
<T, S extends T> void foo1(T tExtendsNumber, S sExtendsT) {
T o = flag ? tExtendsNumber : sExtendsT;
}
<T extends Number, S extends T> void foo2(T tExtendsNumber, S sExtendsT) {
T o = flag ? tExtendsNumber : sExtendsT;
}
<T extends Number, S extends Integer> void foo3(T tExtendsNumber, S sExtendsInteger) {
Number o3 = flag ? tExtendsNumber : sExtendsInteger;
}
<T extends Number, S extends CharSequence> void foo4(
T tExtendsNumber, S sExtendsCharSequence) {
Object o2 = flag ? tExtendsNumber : sExtendsCharSequence;
}
<T extends Long, S extends Integer> void foo5(T tExtendsLong, S sExtendsInt) {
Number o = flag ? tExtendsLong : sExtendsInt;
}
}
class ArrayTypes {
void foo1(String string, String[] strings) {
Serializable o2 = (flag ? string : strings);
}
void foo2(Integer[] integers, String[] strings) {
Object[] o = (flag ? integers : strings);
}
<T extends Cloneable & Serializable> void foo3(T ts, Number[] numbers) {
Cloneable o = flag ? ts : numbers;
}
<T> void foo4(T ts, Number[] numbers) {
Object o = (flag ? ts : numbers);
}
}
class Generics {
void foo1(List<Long> listS, List<Integer> listI) {
Number s = (flag ? listI : listS).get(0);
}
}
}
|