CantAnnotateStaticClass.java revision 2453:3dfd962149b2
1168515Sgshapiro/*
2168515Sgshapiro * @test /nodynamiccopyright/
3168515Sgshapiro * @bug 8006733 8006775
4132943Sgshapiro * @summary Ensure behavior for nested types is correct.
5168515Sgshapiro * @author Werner Dietl
6132943Sgshapiro * @compile CantAnnotateStaticClass.java
7168515Sgshapiro */
890792Sgshapiro
9168515Sgshapiroimport java.util.List;
1090792Sgshapiroimport java.util.ArrayList;
11168515Sgshapiroimport java.util.HashMap;
12168515Sgshapiroimport java.lang.annotation.*;
1390792Sgshapiro
1490792Sgshapiroclass Top {
15168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TA {}
16168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB1 {}
1790792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB2 {}
18168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB3 {}
1990792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB4 {}
20168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB5 {}
2190792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB6 {}
2290792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB7 {}
23168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB8 {}
24168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB9 {}
25168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB10 {}
26168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB11 {}
27168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB12 {}
28168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB13 {}
29168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB14 {}
30168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB15 {}
31168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB16 {}
32168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB17 {}
33168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB18 {}
3490792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB19 {}
3590792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB20 {}
36168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB21 {}
37168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB22 {}
38168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB23 {}
39168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB24 {}
40168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB25 {}
41168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB26 {}
42168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB27 {}
43168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB28 {}
4490792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB29 {}
4590792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB30 {}
46168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB31 {}
47168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB32 {}
48168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB33 {}
4990792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB34 {}
5090792Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB35 {}
51168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB36 {}
52168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB37 {}
53168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB38 {}
54168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB39 {}
55168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB40 {}
56168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TB41 {}
57168515Sgshapiro    @Target(ElementType.TYPE_USE) @interface TC {}
58168515Sgshapiro
59168515Sgshapiro    class Outer {
60168515Sgshapiro        class Inner {
61168515Sgshapiro            Object o1 = Top.this;
62168515Sgshapiro            Object o2 = Outer.this;
63168515Sgshapiro            Object o3 = this;
64168515Sgshapiro        }
65168515Sgshapiro        // Illegal
66168515Sgshapiro        // static class SInner {}
67168515Sgshapiro        // interface IInner {}
68168515Sgshapiro    }
69168515Sgshapiro
70168515Sgshapiro    // All combinations are OK
71168515Sgshapiro
72168515Sgshapiro    Top.@TB1 Outer f1;
73168515Sgshapiro    @TB2 Outer.Inner f1a;
74168515Sgshapiro    Outer. @TC Inner f1b;
75168515Sgshapiro    @TB3 Outer. @TC Inner f1c;
76168515Sgshapiro
77168515Sgshapiro    @TA Top. @TB4 Outer f2;
78168515Sgshapiro    @TA Top. @TB5 Outer.Inner f2a;
7990792Sgshapiro    @TA Top. Outer. @TC Inner f2b;
8090792Sgshapiro    @TA Top. @TB6 Outer. @TC Inner f2c;
81168515Sgshapiro
82168515Sgshapiro    @TB7 Outer f1r() { return null; }
83168515Sgshapiro    @TB8 Outer.Inner f1ra() { return null; }
84168515Sgshapiro    Outer. @TC Inner f1rb() { return null; }
85168515Sgshapiro    @TB9 Outer. @TC Inner f1rc() { return null; }
86168515Sgshapiro
8790792Sgshapiro    void f1param(@TB41 Outer p,
88168515Sgshapiro            @TB10 Outer.Inner p1,
89168515Sgshapiro            Outer. @TC Inner p2,
90112810Sgshapiro            @TB11 Outer. @TC Inner p3) { }
9190792Sgshapiro
92168515Sgshapiro    void f1cast(Object o) {
9390792Sgshapiro        Object l;
94112810Sgshapiro        l = (@TB12 Outer) o;
95168515Sgshapiro        l = (@TB13 Outer.Inner) o;
96168515Sgshapiro        l = (Outer. @TC Inner) o;
97168515Sgshapiro        l = (@TB14 Outer. @TC Inner) o;
98    }
99
100    List<@TB15 Outer> g1;
101    List<@TB16 Outer.Inner> g1a;
102    List<Outer. @TC Inner> g1b;
103    List<@TB17 Outer. @TC Inner> g1c;
104
105    List<@TA Top. @TB18 Outer> g2;
106    List<@TA Top. @TB19 Outer.Inner> g2a;
107    List<@TA Top. Outer. @TC Inner> g2b;
108    List<@TA Top. @TB20 Outer. @TC Inner> g2c;
109
110    List<@TB21 Outer> g1r() { return null; }
111    List<@TB22 Outer.Inner> g1ra() { return null; }
112    List<Outer. @TC Inner> g1rb() { return null; }
113    List<@TB23 Outer. @TC Inner> g1rc() { return null; }
114
115    void g1param(List<@TB24 Outer> p,
116            List<@TB25 Outer.Inner> p1,
117            List<Outer. @TC Inner> p2,
118            List<@TB26 Outer. @TC Inner> p3) { }
119
120    void g1new(Object o) {
121        Object l;
122        l = new @TB27 ArrayList<@TB28 Outer>();
123        l = new @TB29 ArrayList<@TB30 Outer.Inner>();
124        l = new @TB31 HashMap<String, Outer. @TC Inner>();
125        l = new @TB32 HashMap<String, @TB33 Outer. Inner>();
126        l = new @TB34 HashMap<String, @TB35 Outer. @TC Inner>();
127        l = new @TB36 HashMap<String, @TA Top. Outer. @TC Inner>();
128        l = new @TB37 HashMap<String, @TA Top. @TB38 Outer. Inner>();
129        l = new @TB39 HashMap<String, @TA Top. @TB40 Outer. @TC Inner>();
130    }
131}
132