CantAnnotateStaticClass3.java revision 2453:3dfd962149b2
1/*
2 * @test /nodynamiccopyright/
3 * @bug 8006733 8006775 8027262
4 * @summary Ensure behavior for nested types is correct.
5 * @author Werner Dietl
6 * @compile/fail/ref=CantAnnotateStaticClass3.out -XDrawDiagnostics CantAnnotateStaticClass3.java
7 */
8
9import java.util.List;
10import java.util.ArrayList;
11import java.util.HashMap;
12import java.lang.annotation.*;
13
14class Top {
15    @Target(ElementType.TYPE_USE)
16    @interface TA {}
17
18    @Target(ElementType.TYPE_USE)
19    @interface TB {}
20
21    @Target(ElementType.TYPE_USE)
22    @interface TC {}
23
24    interface Outer {
25        class Inner {
26            // Object o1 = Top.this;
27            // Object o2 = Outer.this;
28            Object o3 = this;
29        }
30        static class SInner {
31            // Object o1 = Top.this;
32            // Object o2 = Outer.this;
33            Object o3 = this;
34        }
35        interface IInner {
36            // Object o1 = Top.this;
37            // Object o2 = Outer.this;
38            // Object o3 = this;
39        }
40    }
41
42
43    @TB Outer f1;
44    @TB Outer.Inner f1a; // err
45    @TB Outer.SInner f2a; // err
46    @TB Outer.IInner f3a; // err
47
48    Outer. @TC Inner f1b;
49    Outer. @TC SInner f2b;
50    Outer. @TC IInner f3b;
51
52    @TB Outer. @TC Inner f1c; // err
53    @TB Outer. @TC SInner f2c; // err
54    @TB Outer. @TC IInner f3c; // err
55
56    @TA Top. @TB Outer g1; // err
57    @TA Top. @TB Outer.Inner g1a; // err
58    @TA Top. @TB Outer.SInner g2a; // err
59    @TA Top. @TB Outer.IInner g3a; // err
60
61    @TA Top. Outer. @TC Inner g1b; // err
62    @TA Top. Outer. @TC SInner g2b; // err
63    @TA Top. Outer. @TC IInner g3b; // err
64
65    @TA Top. @TB Outer. @TC Inner g1c; // err
66    @TA Top. @TB Outer. @TC SInner g2c; // err
67    @TA Top. @TB Outer. @TC IInner g3c; // err
68
69    @TB Outer f1r() { return null; }
70
71    @TB Outer.Inner f1ra() { return null; } // err
72    @TB Outer.SInner f2ra() { return null; } // err
73    @TB Outer.IInner f3ra() { return null; } // err
74
75    Outer. @TC Inner f1rb() { return null; }
76    Outer. @TC SInner f2rb() { return null; }
77    Outer. @TC IInner f3rb() { return null; }
78
79    @TB Outer. @TC Inner f1rc() { return null; } // err
80    @TB Outer. @TC SInner f2rc() { return null; } // err
81    @TB Outer. @TC IInner f3rc() { return null; } // err
82
83    void f1param(@TB Outer p,
84            @TB Outer.Inner p1, // err
85            Outer. @TC Inner p2,
86            @TB Outer. @TC Inner p3) { } // err
87    void f2param(@TB Outer p,
88            @TB Outer.SInner p1, // err
89            Outer. @TC SInner p2,
90            @TB Outer. @TC SInner p3) { } // err
91    void f3param(@TB Outer p,
92            @TB Outer.IInner p1, // err
93            Outer. @TC IInner p2,
94            @TB Outer. @TC IInner p3) { } // err
95
96    void f1cast(Object o) {
97        Object l;
98        l = (@TB Outer) o;
99        l = (@TB Outer.Inner) o; // err
100        l = (Outer. @TC Inner) o;
101        l = (@TB Outer. @TC Inner) o; // err
102    }
103    void f2cast(Object o) {
104        Object l;
105        l = (@TB Outer) o;
106        l = (@TB Outer.SInner) o; // err
107        l = (Outer. @TC SInner) o;
108        l = (@TB Outer. @TC SInner) o; // err
109    }
110    void f3cast(Object o) {
111        Object l;
112        l = (@TB Outer) o;
113        l = (@TB Outer.IInner) o; // err
114        l = (Outer. @TC IInner) o;
115        l = (@TB Outer. @TC IInner) o; // err
116    }
117
118    List<@TB Outer> h1;
119
120    List<@TB Outer.Inner> h1a; // err
121    List<@TB Outer.SInner> h2a; // err
122    List<@TB Outer.IInner> h3a; // err
123
124    List<Outer. @TC Inner> h1b;
125    List<Outer. @TC SInner> h2b;
126    List<Outer. @TC IInner> h3b;
127
128    List<@TB Outer. @TC Inner> h1c; // err
129    List<@TB Outer. @TC SInner> h2c; // err
130    List<@TB Outer. @TC IInner> h3c; // err
131
132    List<@TA Top. @TB Outer> k1; // err
133
134    List<@TA Top. @TB Outer.Inner> k1a; // err
135    List<@TA Top. @TB Outer.SInner> k2a; // err
136    List<@TA Top. @TB Outer.IInner> k3a; // err
137
138    List<@TA Top. Outer. @TC Inner> k1b; // err
139    List<@TA Top. Outer. @TC SInner> k2b; // err
140    List<@TA Top. Outer. @TC IInner> k3b; // err
141
142    List<@TA Top. @TB Outer. @TC Inner> k1c; // err
143    List<@TA Top. @TB Outer. @TC SInner> k2c; // err
144    List<@TA Top. @TB Outer. @TC IInner> k3c; // err
145
146
147    List<@TB Outer> g1r() { return null; }
148
149    List<@TB Outer.Inner> g1ra() { return null; } // err
150    List<@TB Outer.SInner> g2ra() { return null; } // err
151    List<@TB Outer.IInner> g3ra() { return null; } // err
152
153    List<Outer. @TC Inner> g1rb() { return null; }
154    List<Outer. @TC SInner> g2rb() { return null; }
155    List<Outer. @TC IInner> g3rb() { return null; }
156
157    List<@TB Outer. @TC Inner> g1rc() { return null; } // err
158    List<@TB Outer. @TC SInner> g2rc() { return null; } // err
159    List<@TB Outer. @TC IInner> g3rc() { return null; } // err
160
161    void g1param(List<@TB Outer> p,
162            List<@TB Outer.Inner> p1, // err
163            List<Outer. @TC Inner> p2,
164            List<@TB Outer. @TC Inner> p3) { } // err
165    void g2param(List<@TB Outer> p,
166            List<@TB Outer.SInner> p1, // err
167            List<Outer. @TC SInner> p2,
168            List<@TB Outer. @TC SInner> p3) { } // err
169    void g3param(List<@TB Outer> p,
170            List<@TB Outer.IInner> p1, // err
171            List<Outer. @TC IInner> p2,
172            List<@TB Outer. @TC IInner> p3) { } // err
173
174    void g1new(Object o) {
175        Object l;
176        l = new @TB ArrayList<@TB Outer>();
177        l = new @TB ArrayList<@TB Outer.Inner>(); // err
178        l = new @TB HashMap<String, Outer. @TC Inner>();
179        l = new @TB HashMap<String, @TB Outer. Inner>(); // err
180        l = new @TB HashMap<String, @TB Outer. @TC Inner>(); // err
181    }
182    void g2new(Object o) {
183        Object l;
184        l = new @TB ArrayList<@TB Outer>();
185        l = new @TB ArrayList<@TB Outer.SInner>(); // err
186        l = new @TB HashMap<String, Outer. @TC SInner>();
187        l = new @TB HashMap<String, @TB Outer. SInner>(); // err
188        l = new @TB HashMap<String, @TB Outer. @TC SInner>(); // err
189    }
190    void g3new(Object o) {
191        Object l;
192        l = new @TB ArrayList<@TB Outer>();
193        l = new @TB ArrayList<@TB Outer.IInner>(); // err
194        l = new @TB HashMap<String, Outer. @TC IInner>();
195        l = new @TB HashMap<String, @TB Outer. IInner>(); // err
196        l = new @TB HashMap<String, @TB Outer. @TC IInner>(); // err
197    }
198    void g4new(Object o) {
199        Object l;
200        l = new @TB ArrayList<@TA Top. @TB Outer>(); // err
201        l = new @TB ArrayList<@TA Top. @TB Outer.IInner>(); // err
202        l = new @TB HashMap<String, @TA Top. Outer. @TC IInner>(); // err
203        l = new @TB HashMap<String, @TA Top. @TB Outer. IInner>(); // err
204        l = new @TB HashMap<String, @TA Top. @TB Outer. @TC IInner>(); // err
205    }
206}
207