LintCast.java revision 1520:71f35e4b93a5
1import java.lang.annotation.*;
2import java.util.List;
3
4/*
5 * @test /nodynamiccopyright/
6 * @bug 6843077 8006775
7 * @summary test that compiler doesn't warn about annotated redundant casts
8 * @author Mahmood Ali
9 * @author Werner Dietl
10 * @compile/ref=LintCast.out -Xlint:cast -XDrawDiagnostics LintCast.java
11 */
12class LintCast {
13    void unparameterized() {
14        String s = "m";
15        String s1 = (String)s;
16        String s2 = (@A String)s;
17    }
18
19    void parameterized() {
20        List<String> l = null;
21        List<String> l1 = (List<String>)l;
22        List<String> l2 = (List<@A String>)l;
23    }
24
25    void array() {
26        int @A [] a = null;
27        int[] a1 = (int[])a;
28        int[] a2 = (int @A [])a;
29    }
30
31    void sameAnnotations() {
32        @A String annotated = null;
33        String unannotated = null;
34
35        // compiler ignore annotated casts even if redundant
36        @A String anno1 = (@A String)annotated;
37
38        // warn if redundant without an annotation
39        String anno2 = (String)annotated;
40        String unanno2 = (String)unannotated;
41    }
42
43    void more() {
44        Object @A [] a = null;
45        Object[] a1 = (Object[])a;
46        Object[] a2 = (Object @A [])a;
47
48        @A List<String> l3 = null;
49        List<String> l4 = (List<String>)l3;
50        List<String> l5 = (@A List<String>)l3;
51
52        List<@A String> l6 = null;
53        List<String> l7 = (List<String>)l6;
54        List<String> l8 = (List<@A String>)l6;
55
56        @A Object o = null;
57        Object o1 = (Object)o;
58        Object o2 = (@A Object)o;
59
60        Outer. @A Inner oi = null;
61        Outer.Inner oi1 = (Outer.Inner)oi;
62        Outer.Inner oi2 = (Outer. @A Inner)oi;
63    }
64
65    class Outer { class Inner {} }
66}
67
68@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
69@interface A { }
70