File: ConditionalExpressions.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (57 lines) | stat: -rw-r--r-- 1,789 bytes parent folder | download | duplicates (3)
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);
        }
    }
}