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