test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java

changeset 0
959103a6100f
child 2525
2eb010b6cb22
equal deleted inserted replaced
-1:000000000000 0:959103a6100f
1 /*
2 * Copyright (c) 2009, 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 method type parameters
29 * @compile -g Driver.java ReferenceInfoUtil.java MethodTypeParam.java
30 * @run main Driver MethodTypeParam
31 */
32 public class MethodTypeParam {
33
34 @TADescriptions({
35 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
36 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
37 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
38 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
39 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
40 })
41 public String regularClass() {
42 return "<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test() { }";
43 }
44
45 @TADescriptions({
46 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
47 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
48 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
49 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
50 })
51 public String regularClass2() {
52 return "<@TA K extends @TB Date, @TC V extends @TE Cloneable> void test() { }";
53 }
54
55 @TADescriptions({
56 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
57 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
58 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
59 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
60 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
61 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
62 })
63 public String regularClassParameterized() {
64 return "<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test() { }";
65 }
66
67 @TADescriptions({
68 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
69 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
70 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
71 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
72 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
73 })
74 public String abstractClass() {
75 return "abstract class Test { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
76 }
77
78 @TADescriptions({
79 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
80 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
81 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
82 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
83 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
84 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
85 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
86 })
87 public String abstractClassParameterized() {
88 return "abstract class Test { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
89 }
90
91 @TADescriptions({
92 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
93 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
94 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
95 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
96 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
97 })
98 public String abstractClassParameterized2() {
99 return "abstract class Test { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
100 }
101
102 @TADescriptions({
103 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
104 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
105 })
106 public String abstractClassParameterized3() {
107 return "abstract class Test { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
108 }
109
110 @TADescriptions({
111 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
112 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
113 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
114 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
115 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
116 })
117 public String regularInterface() {
118 return "interface Test { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
119 }
120
121 @TADescriptions({
122 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
123 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
124 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
125 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
126 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
127 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
128 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
129 @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
130 @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
131 })
132 public String regularInterfaceParameterized() {
133 return "interface Test { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
134 }
135
136 @TADescriptions({
137 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
138 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
139 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
140 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
141 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
142 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
143 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
144 })
145 public String regularInterfaceParameterized2() {
146 return "interface Test { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
147 }
148
149 @TADescription(annotation = "TA", type = METHOD_RETURN)
150 public String useInReturn1() {
151 return "class Test { <T> @TA T m() { throw new RuntimeException(); } }";
152 }
153
154 @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
155 public String useInReturn2() {
156 return "class Test { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
157 }
158
159 @TADescriptions({
160 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
161 @TADescription(annotation = "TB", type = METHOD_RETURN)
162 })
163 public String useInReturn3() {
164 return "class Test { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
165 }
166
167 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
168 paramIndex = 0, genericLocation = {3, 0})
169 public String useInParam1() {
170 return "class Test { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
171 }
172
173 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
174 paramIndex = 0, genericLocation = {3, 0})
175 public String useInParam2() {
176 return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
177 }
178
179 @TADescriptions({
180 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
181 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2),
182 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
183 })
184 public String useInParam3() {
185 return "interface IA {} " +
186 "interface IB<XB> {} " +
187 "interface IC<XC> {} " +
188 "class Test { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
189 }
190
191 @TADescriptions({
192 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
193 paramIndex = 0, boundIndex = 1,
194 genericLocation = {}),
195 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
196 paramIndex = 0, boundIndex = 2,
197 genericLocation = {}),
198 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
199 paramIndex = 0)
200 })
201 public String useInParam4() {
202 return "class Test {" +
203 " interface IA {} " +
204 " interface IB<XB> {} " +
205 " interface IC<XC> {} " +
206 " <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
207 }
208
209 @TADescriptions({
210 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
211 paramIndex = 0, boundIndex = 0,
212 genericLocation = {}),
213 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
214 paramIndex = 0, boundIndex = 0,
215 genericLocation = {1, 0}),
216 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
217 paramIndex = 0, boundIndex = 0,
218 genericLocation = {1, 0, 3, 0}),
219 })
220 public String useInParam5() {
221 return "class Test {" +
222 " interface IA {} " +
223 " class CB<XC> {} " +
224 " <T extends @TA Test. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
225 }
226
227 @TADescriptions({
228 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
229 paramIndex = 0),
230 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
231 paramIndex = 0, boundIndex = 0,
232 genericLocation = {}),
233 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
234 paramIndex = 0, boundIndex = 0,
235 genericLocation = {1, 0, 3, 0}),
236 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
237 paramIndex = 0, boundIndex = 1,
238 genericLocation = {}),
239 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
240 paramIndex = 0, boundIndex = 1,
241 genericLocation = {3, 0})
242 })
243 public String useInParam6() {
244 return "class Test {" +
245 " interface IA {} " +
246 " interface IB<XB> {} " +
247 " class CC<XC> {} " +
248 " interface ID<XD> {} " +
249 " <@TA T extends @TB Test.CC<@TC IA> & Test. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
250 }
251 }

mercurial