Tue, 15 Oct 2013 15:57:13 -0700
8026564: import changes from type-annotations forest
Reviewed-by: jjg
Contributed-by: wdietl@gmail.com, steve.sides@oracle.com
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=CantAnnotateStaticClass2.out -XDrawDiagnostics CantAnnotateStaticClass2.java
8 */
10 import java.util.List;
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.lang.annotation.*;
15 class Top {
16 @Target(ElementType.TYPE_USE)
17 @interface TA {}
19 @Target(ElementType.TYPE_USE)
20 @interface TB {}
22 @Target(ElementType.TYPE_USE)
23 @interface TC {}
25 static class 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 }
43 @TB Outer f1;
44 @TB Outer.Inner f1a;
45 @TB Outer.SInner f2a; // err
46 @TB Outer.IInner f3a; // err
48 Outer. @TC Inner f1b;
49 Outer. @TC SInner f2b;
50 Outer. @TC IInner f3b;
52 @TB Outer. @TC Inner f1c;
53 @TB Outer. @TC SInner f2c; // err
54 @TB Outer. @TC IInner f3c; // err
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
61 @TA Top. Outer. @TC Inner g1b; // err
62 @TA Top. Outer. @TC SInner g2b; // err
63 @TA Top. Outer. @TC IInner g3b; // err
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
69 @TB Outer f1r() { return null; }
71 @TB Outer.Inner f1ra() { return null; }
72 @TB Outer.SInner f2ra() { return null; } // err
73 @TB Outer.IInner f3ra() { return null; } // err
75 Outer. @TC Inner f1rb() { return null; }
76 Outer. @TC SInner f2rb() { return null; }
77 Outer. @TC IInner f3rb() { return null; }
79 @TB Outer. @TC Inner f1rc() { return null; }
80 @TB Outer. @TC SInner f2rc() { return null; } // err
81 @TB Outer. @TC IInner f3rc() { return null; } // err
83 void f1param(@TB Outer p,
84 @TB Outer.Inner p1,
85 Outer. @TC Inner p2,
86 @TB Outer. @TC Inner p3) { }
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
96 void f1cast(Object o) {
97 Object l;
98 l = (@TB Outer) o;
99 l = (@TB Outer.Inner) o;
100 l = (Outer. @TC Inner) o;
101 l = (@TB Outer. @TC Inner) o;
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 }
118 List<@TB Outer> h1;
120 List<@TB Outer.Inner> h1a;
121 List<@TB Outer.SInner> h2a; // err
122 List<@TB Outer.IInner> h3a; // err
124 List<Outer. @TC Inner> h1b;
125 List<Outer. @TC SInner> h2b;
126 List<Outer. @TC IInner> h3b;
128 List<@TB Outer. @TC Inner> h1c;
129 List<@TB Outer. @TC SInner> h2c; // err
130 List<@TB Outer. @TC IInner> h3c; // err
132 List<@TA Top. @TB Outer> k1; // err
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
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
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
147 List<@TB Outer> g1r() { return null; }
149 List<@TB Outer.Inner> g1ra() { return null; }
150 List<@TB Outer.SInner> g2ra() { return null; } // err
151 List<@TB Outer.IInner> g3ra() { return null; } // err
153 List<Outer. @TC Inner> g1rb() { return null; }
154 List<Outer. @TC SInner> g2rb() { return null; }
155 List<Outer. @TC IInner> g3rb() { return null; }
157 List<@TB Outer. @TC Inner> g1rc() { return null; }
158 List<@TB Outer. @TC SInner> g2rc() { return null; } // err
159 List<@TB Outer. @TC IInner> g3rc() { return null; } // err
161 void g1param(List<@TB Outer> p,
162 List<@TB Outer.Inner> p1,
163 List<Outer. @TC Inner> p2,
164 List<@TB Outer. @TC Inner> p3) { }
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
174 void g1new(Object o) {
175 Object l;
176 l = new @TB ArrayList<@TB Outer>();
177 l = new @TB ArrayList<@TB Outer.Inner>();
178 l = new @TB HashMap<String, Outer. @TC Inner>();
179 l = new @TB HashMap<String, @TB Outer. Inner>();
180 l = new @TB HashMap<String, @TB Outer. @TC Inner>();
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 l = new @TB HashMap<String, @TA @TB @TC Top. Outer. IInner>(); // err
206 }
207 }