1 /*
2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
25 
26 /*
27  * @test
28  * @summary Test population of reference info for nested types
29  * @compile -g Driver.java ReferenceInfoUtil.java NestedTypes.java
30  * @run main Driver NestedTypes
31  */
32 public class NestedTypes {
33 
34     // method parameters
35 
36     @TADescriptions({
37         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
38                 genericLocation = {}, paramIndex = 0),
39         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
40                 genericLocation = {1, 0}, paramIndex = 0)
41     })
testParam1()42     public String testParam1() {
43         return "void test(@TA Outer.@TB Inner a) { }";
44     }
45 
46     @TADescriptions({
47         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
48                 genericLocation = {3, 0}, paramIndex = 0),
49         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
50                 genericLocation = {3, 0, 1, 0}, paramIndex = 0)
51     })
testParam1b()52     public String testParam1b() {
53         return "void test(List<@TA Outer.@TB Inner> a) { }";
54     }
55 
56     // TODO: the tests that use @TA Map.Entry should fail, as
57     // Map cannot be annotated.
58     // We need some tests for the fully qualified name syntax.
59     /*
60     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
61             genericLocation = {}, paramIndex = 0)
62     public String testParam1c() {
63         return "void test(java.util.@TA Map.Entry a) { }";
64     }
65 
66     @TADescriptions({
67         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
68                 genericLocation = {}, paramIndex = 0),
69         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
70                 genericLocation = {1, 0}, paramIndex = 0)
71     })
72     public String testParam1d() {
73         return "void test(java.util.@TA Map.@TB Entry a) { }";
74     }
75 
76     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
77             genericLocation = {3, 0}, paramIndex = 0)
78     public String testParam1e() {
79         return "void test(List<java.util.@TA Map.Entry> a) { }";
80     }
81 
82     @TADescriptions({
83         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
84                 genericLocation = {3, 0}, paramIndex = 0),
85         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
86                 genericLocation = {3, 0, 1, 0}, paramIndex = 0)
87     })
88     public String testParam1f() {
89         return "void test(List<java.util.@TA Map. @TB Entry> a) { }";
90     }
91     */
92 
93     @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
94            genericLocation = {3, 0}, paramIndex = 0)
testParam1g()95     public String testParam1g() {
96         return "void test(List<java.util.Map. @TB Entry> a) { }";
97     }
98 
99     @TADescriptions({
100         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
101                 genericLocation = {}, paramIndex = 0),
102         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
103                 genericLocation = {1, 0}, paramIndex = 0)
104     })
testParam2()105     public String testParam2() {
106         return "void test(@TA GOuter<String,String>.@TB GInner<String,String> a) { }";
107     }
108 
109     @TADescriptions({
110         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
111                 genericLocation = {3, 0}, paramIndex = 0),
112         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
113                 genericLocation = {3, 0, 1, 0}, paramIndex = 0)
114     })
testParam2b()115     public String testParam2b() {
116         return "void test(List<@TA GOuter<String,String>.@TB GInner<String,String>> a) { }";
117     }
118 
119     @TADescriptions({
120         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
121                 genericLocation = {0, 0, 0, 0}, paramIndex = 0),
122         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
123                 genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0),
124         @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
125                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
126         @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
127                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
128         @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
129                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
130         @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
131                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
132         @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
133                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
134         @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
135                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
136         @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
137                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
138         @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
139         @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
140                 genericLocation = {0, 0}, paramIndex = 0)
141     })
testParam3()142     public String testParam3() {
143         return "class Outer {\n" +
144                 " class GInner<X> {\n" +
145                 "  class GInner2<Y, Z> {}\n" +
146                 "}}\n\n" +
147                 "class Test {\n" +
148                 " void test(@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a) { }\n" +
149                 "}";
150     }
151 
152     @TADescriptions({
153         @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
154                 genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0),
155         @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
156                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0),
157         @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
158                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
159         @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
160                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
161         @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
162                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
163         @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
164                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
165         @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
166                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
167         @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
168                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
169         @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
170                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
171         @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
172                 genericLocation = {3, 0}, paramIndex = 0),
173         @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
174                 genericLocation = {3, 0, 0, 0}, paramIndex = 0)
175     })
testParam4()176     public String testParam4() {
177         return "class Outer {\n" +
178                 " class GInner<X> {\n" +
179                 "  class GInner2<Y, Z> {}\n" +
180                 "}}\n\n" +
181                 "class Test {\n" +
182                 " void test(List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a) { }\n" +
183                 "}";
184     }
185 
186 
187     // Local variables
188 
189     @TADescriptions({
190         @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
191                 genericLocation = {},
192                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
193         @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
194                 genericLocation = {1, 0},
195                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
196     })
testLocal1a()197     public String testLocal1a() {
198         return "void test() { @TA Outer.@TB Inner a = null; }";
199     }
200 
201     @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
202             genericLocation = {},
203             lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
testLocal1b()204     public String testLocal1b() {
205         return "void test() { @TA Outer.Inner a = null; }";
206     }
207 
208     @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
209             genericLocation = {1, 0},
210             lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
testLocal1c()211     public String testLocal1c() {
212         return "void test() { Outer.@TB Inner a = null; }";
213     }
214 
215     @TADescriptions({
216         @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
217                 genericLocation = {},
218                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
219         @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
220                 genericLocation = {1, 0},
221                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
222     })
testLocal2()223     public String testLocal2() {
224         return "void test() { @TA GOuter<String,String>.@TB GInner<String,String> a = null; }";
225     }
226 
227     @TADescriptions({
228         @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
229                 genericLocation = {0, 0, 0, 0},
230                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
231         @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
232                 genericLocation = {0, 0, 0, 0, 1, 0},
233                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
234         @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
235                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
236                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
237         @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
238                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
239                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
240         @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
241                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
242                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
243         @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
244                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
245                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
246         @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
247                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
248                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
249         @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
250                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
251                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
252         @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
253                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
254                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
255         @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
256                 genericLocation = {},
257                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
258         @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
259                 genericLocation = {0, 0},
260                 lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
261     })
testLocal3()262     public String testLocal3() {
263         return "class Outer {\n" +
264                 " class GInner<X> {\n" +
265                 "  class GInner2<Y, Z> {}\n" +
266                 "}}\n\n" +
267                 "class Test {\n" +
268                 " void test() { @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a = null; }\n" +
269                 "}";
270     }
271 
272     @TADescriptions({
273         @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
274                 genericLocation = {3, 0, 0, 0, 0, 0},
275                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
276         @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
277                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
278                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
279         @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
280                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
281                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
282         @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
283                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
284                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
285         @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
286                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
287                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
288         @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
289                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
290                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
291         @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
292                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
293                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
294         @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
295                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
296                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
297         @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
298                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
299                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
300         @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
301                 genericLocation = {3, 0},
302                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
303         @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
304                 genericLocation = {3, 0, 0, 0},
305                 lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
306     })
testLocal4()307     public String testLocal4() {
308         return "class Outer {\n" +
309                 " class GInner<X> {\n" +
310                 "  class GInner2<Y, Z> {}\n" +
311                 "}}\n\n" +
312                 "class Test {\n" +
313                 " void test() { List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a = null; }\n" +
314                 "}";
315     }
316 
317 
318     // fields
319 
320     @TADescriptions({
321         @TADescription(annotation = "TA", type = FIELD,
322                 genericLocation = {}),
323         @TADescription(annotation = "TB", type = FIELD,
324                 genericLocation = {1, 0})
325     })
testField1a()326     public String testField1a() {
327         return "@TA Outer.@TB Inner a;";
328     }
329 
330     @TADescription(annotation = "TA", type = FIELD,
331             genericLocation = {})
testField1b()332     public String testField1b() {
333         return "@TA Outer.Inner a;";
334     }
335 
336     @TADescription(annotation = "TB", type = FIELD,
337             genericLocation = {1, 0})
testField1c()338     public String testField1c() {
339         return "Outer.@TB Inner a;";
340     }
341 
342     @TADescriptions({
343         @TADescription(annotation = "TA", type = FIELD,
344                 genericLocation = {}),
345         @TADescription(annotation = "TB", type = FIELD,
346                 genericLocation = {1, 0})
347     })
testField2()348     public String testField2() {
349         return "@TA GOuter<String,String>.@TB GInner<String,String> a;";
350     }
351 
352     @TADescriptions({
353         @TADescription(annotation = "TA", type = FIELD,
354                 genericLocation = {0, 0, 0, 0}),
355         @TADescription(annotation = "TB", type = FIELD,
356                 genericLocation = {0, 0, 0, 0, 1, 0}),
357         @TADescription(annotation = "TC", type = FIELD,
358                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
359         @TADescription(annotation = "TD", type = FIELD,
360                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
361         @TADescription(annotation = "TE", type = FIELD,
362                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
363         @TADescription(annotation = "TF", type = FIELD,
364                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
365         @TADescription(annotation = "TG", type = FIELD,
366                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
367         @TADescription(annotation = "TH", type = FIELD,
368                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
369         @TADescription(annotation = "TI", type = FIELD,
370                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
371         @TADescription(annotation = "TJ", type = FIELD),
372         @TADescription(annotation = "TK", type = FIELD,
373                 genericLocation = {0, 0})
374     })
testField3()375     public String testField3() {
376         return "class Outer {\n" +
377                 " class GInner<X> {\n" +
378                 "  class GInner2<Y, Z> {}\n" +
379                 "}}\n\n" +
380                 "class Test {\n" +
381                 " @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a;\n" +
382                 "}";
383     }
384 
385     @TADescriptions({
386         @TADescription(annotation = "TA", type = FIELD,
387                 genericLocation = {3, 0, 0, 0, 0, 0}),
388         @TADescription(annotation = "TB", type = FIELD,
389                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
390         @TADescription(annotation = "TC", type = FIELD,
391                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
392         @TADescription(annotation = "TD", type = FIELD,
393                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
394         @TADescription(annotation = "TE", type = FIELD,
395                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
396         @TADescription(annotation = "TF", type = FIELD,
397                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
398         @TADescription(annotation = "TG", type = FIELD,
399                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
400         @TADescription(annotation = "TH", type = FIELD,
401                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
402         @TADescription(annotation = "TI", type = FIELD,
403                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
404         @TADescription(annotation = "TJ", type = FIELD,
405                 genericLocation = {3, 0}),
406         @TADescription(annotation = "TK", type = FIELD,
407                 genericLocation = {3, 0, 0, 0})
408     })
testField4()409     public String testField4() {
410         return "class Outer {\n" +
411                 " class GInner<X> {\n" +
412                 "  class GInner2<Y, Z> {}\n" +
413                 "}}\n\n" +
414                 "class Test {\n" +
415                 " List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a;\n" +
416                 "}";
417     }
418 
419 
420     // return types
421 
422     @TADescriptions({
423         @TADescription(annotation = "TA", type = METHOD_RETURN,
424                 genericLocation = {}),
425         @TADescription(annotation = "TB", type = METHOD_RETURN,
426                 genericLocation = {1, 0})
427     })
testReturn1()428     public String testReturn1() {
429         return "@TA Outer.@TB Inner test() { return null; }";
430     }
431 
432     @TADescriptions({
433         @TADescription(annotation = "TA", type = METHOD_RETURN,
434                 genericLocation = {}),
435         @TADescription(annotation = "TB", type = METHOD_RETURN,
436                 genericLocation = {1, 0})
437     })
testReturn2()438     public String testReturn2() {
439         return "@TA GOuter<String,String>.@TB GInner<String,String> test() { return null; }";
440     }
441 
442     @TADescriptions({
443         @TADescription(annotation = "TA", type = METHOD_RETURN,
444                 genericLocation = {0, 0, 0, 0}),
445         @TADescription(annotation = "TB", type = METHOD_RETURN,
446                 genericLocation = {0, 0, 0, 0, 1, 0}),
447         @TADescription(annotation = "TC", type = METHOD_RETURN,
448                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
449         @TADescription(annotation = "TD", type = METHOD_RETURN,
450                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
451         @TADescription(annotation = "TE", type = METHOD_RETURN,
452                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
453         @TADescription(annotation = "TF", type = METHOD_RETURN,
454                 genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
455         @TADescription(annotation = "TG", type = METHOD_RETURN,
456                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
457         @TADescription(annotation = "TH", type = METHOD_RETURN,
458                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
459         @TADescription(annotation = "TI", type = METHOD_RETURN,
460                 genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
461         @TADescription(annotation = "TJ", type = METHOD_RETURN),
462         @TADescription(annotation = "TK", type = METHOD_RETURN,
463                 genericLocation = {0, 0})
464     })
testReturn3()465     public String testReturn3() {
466         return "class Outer {\n" +
467                 " class GInner<X> {\n" +
468                 "  class GInner2<Y, Z> {}\n" +
469                 "}}\n\n" +
470                 "class Test {\n" +
471                 " @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] test() { return null; }\n" +
472                 "}";
473     }
474 
475     @TADescriptions({
476         @TADescription(annotation = "TA", type = METHOD_RETURN,
477                 genericLocation = {3, 0, 0, 0, 0, 0}),
478         @TADescription(annotation = "TB", type = METHOD_RETURN,
479                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
480         @TADescription(annotation = "TC", type = METHOD_RETURN,
481                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
482         @TADescription(annotation = "TD", type = METHOD_RETURN,
483                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
484         @TADescription(annotation = "TE", type = METHOD_RETURN,
485                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
486         @TADescription(annotation = "TF", type = METHOD_RETURN,
487                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
488         @TADescription(annotation = "TG", type = METHOD_RETURN,
489                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
490         @TADescription(annotation = "TH", type = METHOD_RETURN,
491                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
492         @TADescription(annotation = "TI", type = METHOD_RETURN,
493                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
494         @TADescription(annotation = "TJ", type = METHOD_RETURN,
495                 genericLocation = {3, 0}),
496         @TADescription(annotation = "TK", type = METHOD_RETURN,
497                 genericLocation = {3, 0, 0, 0})
498     })
testReturn4()499     public String testReturn4() {
500         return "class Outer {\n" +
501                 " class GInner<X> {\n" +
502                 "  class GInner2<Y, Z> {}\n" +
503                 "}}\n\n" +
504                 "class Test {\n" +
505                 " List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> test() { return null; }\n" +
506                 "}";
507     }
508 
509     @TADescriptions({
510         @TADescription(annotation = "TA", type = METHOD_RETURN,
511                 genericLocation = {3, 0}),
512         @TADescription(annotation = "TB", type = METHOD_RETURN,
513                 genericLocation = {3, 0, 3, 0}),
514         @TADescription(annotation = "TC", type = METHOD_RETURN,
515                 genericLocation = {3, 0, 3, 1}),
516         @TADescription(annotation = "TD", type = METHOD_RETURN,
517                 genericLocation = {3, 0, 3, 1, 3, 0}),
518         @TADescription(annotation = "TE", type = METHOD_RETURN,
519                 genericLocation = {3, 0, 1, 0}),
520         @TADescription(annotation = "TF", type = METHOD_RETURN,
521                 genericLocation = {3, 0, 1, 0, 3, 0}),
522         @TADescription(annotation = "TG", type = METHOD_RETURN,
523                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
524         @TADescription(annotation = "TH", type = METHOD_RETURN,
525                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}),
526         @TADescription(annotation = "TI", type = METHOD_RETURN,
527                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
528         @TADescription(annotation = "TJ", type = METHOD_RETURN,
529                 genericLocation = {3, 0, 1, 0, 1, 0}),
530     })
testReturn5()531     public String testReturn5() {
532         return "class GOuter<A, B> {\n" +
533                 " class GInner<X> {\n" +
534                 "  class GInner2<Y, Z> {}\n" +
535                 "}}\n\n" +
536                 "class Test {\n" +
537                 " List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>> test() { return null; }\n" +
538                 "}";
539     }
540 
541 
542     // type parameters
543 
544     @TADescriptions({
545         @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
546                 genericLocation = {}, paramIndex = 0, boundIndex = 0),
547         @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
548                 genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
549     })
testTypeparam1()550     public String testTypeparam1() {
551         return "<X extends @TA Outer.@TB Inner> X test() { return null; }";
552     }
553 
554     @TADescriptions({
555         @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
556                 genericLocation = {}, paramIndex = 0, boundIndex = 0),
557         @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
558                 genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
559     })
testTypeparam2()560     public String testTypeparam2() {
561         return "<X extends @TA GOuter<String,String>.@TB GInner<String,String>> X test() { return null; }";
562     }
563 
564     @TADescriptions({
565         @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
566                 genericLocation = {},
567                 paramIndex = 0, boundIndex = 0),
568         @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
569                 genericLocation = {1, 0},
570                 paramIndex = 0, boundIndex = 0),
571         @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
572                 genericLocation = {1, 0, 3, 0},
573                 paramIndex = 0, boundIndex = 0),
574         @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
575                 genericLocation = {1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
576                 paramIndex = 0, boundIndex = 0),
577         @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
578                 genericLocation = {1, 0, 3, 0, 3, 0},
579                 paramIndex = 0, boundIndex = 0),
580         @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
581                 genericLocation = {1, 0, 3, 0, 3, 0, 0, 0},
582                 paramIndex = 0, boundIndex = 0),
583         @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
584                 genericLocation = {1, 0, 1, 0},
585                 paramIndex = 0, boundIndex = 0),
586         @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
587                 genericLocation = {1, 0, 1, 0, 3, 0},
588                 paramIndex = 0, boundIndex = 0),
589         @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
590                 genericLocation = {1, 0, 1, 0, 3, 1},
591                 paramIndex = 0, boundIndex = 0),
592     })
testTypeparam3()593     public String testTypeparam3() {
594         return "class Outer {\n" +
595                 " class GInner<X> {\n" +
596                 "  class GInner2<Y, Z> {}\n" +
597                 "}}\n\n" +
598                 "class Test {\n" +
599                 " <X extends @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object>> X test() { return null; }\n" +
600                 "}";
601     }
602 
603     @TADescriptions({
604         @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
605                 genericLocation = {3, 0, 0, 0, 0, 0},
606                 paramIndex = 0, boundIndex = 1),
607         @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
608                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
609                 paramIndex = 0, boundIndex = 1),
610         @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
611                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
612                 paramIndex = 0, boundIndex = 1),
613         @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
614                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
615                 paramIndex = 0, boundIndex = 1),
616         @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
617                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
618                 paramIndex = 0, boundIndex = 1),
619         @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
620                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
621                 paramIndex = 0, boundIndex = 1),
622         @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
623                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
624                 paramIndex = 0, boundIndex = 1),
625         @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
626                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
627                 paramIndex = 0, boundIndex = 1),
628         @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
629                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
630                 paramIndex = 0, boundIndex = 1),
631         @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
632                 genericLocation = {3, 0},
633                 paramIndex = 0, boundIndex = 1),
634         @TADescription(annotation = "TK", type = METHOD_TYPE_PARAMETER_BOUND,
635                 genericLocation = {3, 0, 0, 0},
636                 paramIndex = 0, boundIndex = 1)
637     })
testTypeparam4()638     public String testTypeparam4() {
639         return "class Outer {\n" +
640                 " class GInner<X> {\n" +
641                 "  class GInner2<Y, Z> {}\n" +
642                 "}}\n\n" +
643                 "class Test {\n" +
644                 " <X extends List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]>> X test() { return null; }\n" +
645                 "}";
646     }
647 
648     @TADescriptions({
649         @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
650                 genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1),
651         @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
652                 genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
653         @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
654                 genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1),
655         @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
656                 genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1),
657         @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
658                 genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
659         @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
660                 genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
661         @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
662                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
663         @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
664                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
665         @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
666                 genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
667         @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
668                 genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
669     })
testTypeparam5()670     public String testTypeparam5() {
671         return "class GOuter<A, B> {\n" +
672                 " class GInner<X> {\n" +
673                 "  class GInner2<Y, Z> {}\n" +
674                 "}}\n\n" +
675                 "class Test {\n" +
676                 " <X extends List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>>> X test() { return null; }\n" +
677                 "}";
678     }
679 
680     @TADescription(annotation = "TA", type = FIELD,
681             genericLocation = {3, 0, 1, 0})
testUses1a()682     public String testUses1a() {
683         return "class Test { class Inner {}    List<@TA Inner> f; }";
684     }
685 
686     @TADescription(annotation = "TA", type = FIELD,
687             genericLocation = {3, 0})
testUses1b()688     public String testUses1b() {
689         return "class Test { class Inner {}    List<@TA Test.Inner> f; }";
690     }
691 
692     @TADescription(annotation = "TA", type = FIELD,
693             genericLocation = {3, 0, 1, 0, 1, 0})
694     @TestClass("Test$Inner")
testUses2a()695     public String testUses2a() {
696         return "class Test { class Inner { class Inner2{}    List<@TA Inner2> f; }}";
697     }
698 
699     @TADescription(annotation = "TA", type = FIELD,
700             genericLocation = {3, 0, 1, 0})
701     @TestClass("Test$Inner")
testUses2b()702     public String testUses2b() {
703         return "class Test { class Inner { class Inner2{}    List<@TA Inner.Inner2> f; }}";
704     }
705 
706     @TADescription(annotation = "TA", type = FIELD,
707             genericLocation = {3, 0, 1, 0, 1, 0})
708     @TestClass("Test$Inner")
testUses2c()709     public String testUses2c() {
710         return "class Test { class Inner { class Inner2{}    List<Inner.@TA Inner2> f; }}";
711     }
712 
713     @TADescription(annotation = "TA", type = FIELD,
714             genericLocation = {3, 0})
715     @TestClass("Test$Inner")
testUses2d()716     public String testUses2d() {
717         return "class Test{ class Inner { class Inner2{}    List<@TA Test.Inner.Inner2> f; }}";
718     }
719 
720     @TADescription(annotation = "TA", type = FIELD,
721             genericLocation = {3, 0, 1, 0})
722     @TestClass("Test$Inner")
testUses2e()723     public String testUses2e() {
724         return "class Test { class Inner { class Inner2{}    List<Test.@TA Inner.Inner2> f; }}";
725     }
726 
727     @TADescription(annotation = "TA", type = FIELD,
728             genericLocation = {3, 0, 1, 0, 1, 0})
729     @TestClass("Test$Inner")
testUses2f()730     public String testUses2f() {
731         return "class Test { class Inner { class Inner2{}    List<Test.Inner.@TA Inner2> f; }}";
732     }
733 
734     @TADescription(annotation = "TA", type = FIELD,
735             genericLocation = {3, 0, 1, 0, 1, 0})
736     @TestClass("Test$Inner")
testUses3a()737     public String testUses3a() {
738         return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
739                 "    List<Test.Inner.@TA Inner2> f; }}";
740     }
741 
742     @TADescription(annotation = "TA", type = FIELD,
743             genericLocation = {3, 0, 1, 0})
744     @TestClass("Test$Inner")
testUses3b()745     public String testUses3b() {
746         return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
747                 "    List<Test.@TA Inner.Inner2> f; }}";
748     }
749 
750     @TADescriptions({
751         @TADescription(annotation = "TA", type = FIELD,
752                 genericLocation = {}),
753         @TADescription(annotation = "TB", type = FIELD,
754                 genericLocation = {3, 0})
755     })
testUses4()756     public String testUses4() {
757         return "class Test { static class TInner {}\n" +
758                 "    @TA TInner f; \n" +
759                 "    List<@TB TInner> g; }";
760     }
761 
762     @TADescription(annotation = "TA", type = FIELD,
763             genericLocation = {3, 0, 1, 0, 3, 1})
764     @TestClass("Test$Inner")
testUses3c()765     public String testUses3c() {
766         return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
767                 "    List<Test.Inner<String, @TA Object>.Inner2<Test, Test>> f; }}";
768     }
769 
770     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex=0)
testFullyQualified1()771     public String testFullyQualified1() {
772         return "void testme(java.security.@TA ProtectionDomain protectionDomain) {}";
773     }
774 
775     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex=0,
776             genericLocation = {3, 0})
testFullyQualified2()777     public String testFullyQualified2() {
778         return "void testme(List<java.security.@TA ProtectionDomain> protectionDomain) {}";
779     }
780 
781     @TADescriptions({
782         @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
783                 genericLocation = {},
784                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
785                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
786                 lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
787         @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
788                 genericLocation = {1, 0},
789                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
790                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
791                 lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
792         @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
793                 // Only classes count, not methods.
794                 genericLocation = {1, 0, 1, 0},
795                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
796                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
797                 lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
798     })
799     @TestClass("Outer$Inner")
testMethodNesting1()800     public String testMethodNesting1() {
801         return "class Outer {\n" +
802                 " class Inner {\n" +
803                 "  void foo() {\n" +
804                 "    class MInner {}\n" +
805                 "    @TA Outer . @TB Inner l1 = null;\n" +
806                 "    @TC MInner l2 = null;\n" +
807                 "  }\n" +
808                 "}}\n";
809     }
810 
811     @TADescriptions({
812         @TADescription(annotation = "TA", type = NEW,
813                 genericLocation = {},
814                 offset = 0),
815         @TADescription(annotation = "TB", type = NEW,
816                 genericLocation = {1, 0},
817                 offset = 0),
818         @TADescription(annotation = "TC", type = NEW,
819                 // Only classes count, not methods.
820                 genericLocation = {1, 0, 1, 0},
821                 offset = 12),
822     })
823     @TestClass("Outer$Inner")
testMethodNesting2()824     public String testMethodNesting2() {
825         return "class Outer {\n" +
826                 " class Inner {\n" +
827                 "  void foo() {\n" +
828                 "    class MInner {}\n" +
829                 "    Object o1 = new @TA Outer . @TB Inner();" +
830                 "    Object o2 = new @TC MInner();\n" +
831                 "  }\n" +
832                 "}}\n";
833     }
834 
835     @TADescriptions({
836         @TADescription(annotation = "TA", type = CLASS_EXTENDS,
837                 genericLocation = {}, typeIndex = -1),
838         @TADescription(annotation = "TB", type = CLASS_EXTENDS,
839                 genericLocation = {3, 0}, typeIndex = -1),
840         @TADescription(annotation = "TC", type = CLASS_EXTENDS,
841                 genericLocation = {3, 1}, typeIndex = -1),
842         @TADescription(annotation = "TD", type = CLASS_EXTENDS,
843                 genericLocation = {1, 0}, typeIndex = -1),
844         @TADescription(annotation = "TE", type = CLASS_EXTENDS,
845                 genericLocation = {1, 0, 3, 0}, typeIndex = -1),
846         @TADescription(annotation = "TF", type = CLASS_EXTENDS,
847                 genericLocation = {1, 0, 3, 1}, typeIndex = -1)
848     })
849     @TestClass("GOuter$GInner$Test")
testExtends1()850     public String testExtends1() {
851         return "class GOuter<A, B> {\n" +
852                 "  class GInner<X, Y> {\n" +
853                 "    class Test extends @TA GOuter<@TB String, @TC String>.@TD GInner<@TE String, @TF String> {}" +
854                 "  }" +
855                 "}";
856     }
857 
858     @TADescriptions({
859         @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER,
860                 genericLocation = {}, paramIndex = 0),
861         @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND,
862                 genericLocation = {}, paramIndex = 0, boundIndex = 0),
863         @TADescription(annotation = "TC", type = FIELD,
864                 genericLocation = {}),
865         @TADescription(annotation = "TD", type = FIELD,
866                 genericLocation = {3, 0})
867     })
868     @TestClass("Test$1Nested")
testNestedInMethod1()869     public String testNestedInMethod1() {
870         return "class Test {\n" +
871                 "  void foobar() {\n" +
872                 "    class Nested<@TA X extends @TB Object> {\n" +
873                 "      @TC List<@TD Object> f;\n" +
874                 "    }\n" +
875                 "  }" +
876                 "}";
877     }
878 }
879