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