1 /* 2 * Copyright (c) 2009, 2015, 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 import static java.lang.System.lineSeparator; 26 27 /* 28 * @test 29 * @bug 8042451 30 * @summary Test population of reference info for method type parameters 31 * @modules jdk.jdeps/com.sun.tools.classfile 32 * @compile -g Driver.java ReferenceInfoUtil.java MethodTypeParam.java 33 * @run main Driver MethodTypeParam 34 */ 35 public class MethodTypeParam { 36 37 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 38 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 39 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 40 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 41 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 42 public String regularClass() { 43 return "<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test() { }"; 44 } 45 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 public String regularClass2() { 51 return "<@TA K extends @TB Date, @TC V extends @TE Cloneable> void test() { }"; 52 } 53 54 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 55 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 56 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 57 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 58 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 59 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 60 public String regularClassParameterized() { 61 return "<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test() { }"; 62 } 63 64 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 65 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 66 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 67 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 68 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 69 public String abstractClass() { 70 return "abstract class %TEST_CLASS_NAME% { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }"; 71 } 72 73 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 74 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 75 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 76 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 77 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 78 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 79 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 80 public String abstractClassParameterized() { 81 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }"; 82 } 83 84 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 85 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 86 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 87 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 88 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 89 public String abstractClassParameterized2() { 90 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }"; 91 } 92 93 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 94 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 95 public String abstractClassParameterized3() { 96 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }"; 97 } 98 99 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 100 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 101 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 102 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 103 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 104 public String regularInterface() { 105 return "interface %TEST_CLASS_NAME% { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }"; 106 } 107 108 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 109 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 110 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 111 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 112 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 113 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 114 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 115 @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 116 @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 117 public String regularInterfaceParameterized() { 118 return "interface %TEST_CLASS_NAME% { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }"; 119 } 120 121 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 122 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 123 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 124 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 125 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 126 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 127 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 128 public String regularInterfaceParameterized2() { 129 return "interface %TEST_CLASS_NAME% { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }"; 130 } 131 132 @TADescription(annotation = "TA", type = METHOD_RETURN) 133 public String useInReturn1() { 134 return "class %TEST_CLASS_NAME% { <T> @TA T m() { throw new RuntimeException(); } }"; 135 } 136 137 @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0}) 138 public String useInReturn2() { 139 return "class %TEST_CLASS_NAME% { <T> Class<@TA T> m() { throw new RuntimeException(); } }"; 140 } 141 142 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 143 @TADescription(annotation = "TB", type = METHOD_RETURN) 144 public String useInReturn3() { 145 return "class %TEST_CLASS_NAME% { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }"; 146 } 147 148 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, 149 paramIndex = 0, genericLocation = {3, 0}) 150 public String useInParam1() { 151 return "class %TEST_CLASS_NAME% { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }"; 152 } 153 154 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, 155 paramIndex = 0, genericLocation = {3, 0}) 156 public String useInParam2() { 157 return "class %TEST_CLASS_NAME% { void m(Class<@TA Object> p) { throw new RuntimeException(); } }"; 158 } 159 160 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 161 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2) 162 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0) 163 public String useInParam3() { 164 return "interface IA {} " + 165 "interface IB<XB> {} " + 166 "interface IC<XC> {} " + 167 "class %TEST_CLASS_NAME% { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }"; 168 } 169 170 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, 171 paramIndex = 0, boundIndex = 1, 172 genericLocation = {}) 173 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, 174 paramIndex = 0, boundIndex = 2, 175 genericLocation = {}) 176 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, 177 paramIndex = 0) 178 public String useInParam4() { 179 return "class %TEST_CLASS_NAME% {" + 180 " interface IA {} " + 181 " interface IB<XB> {} " + 182 " interface IC<XC> {} " + 183 " <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }"; 184 } 185 186 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, 187 paramIndex = 0, boundIndex = 0, 188 genericLocation = {}) 189 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, 190 paramIndex = 0, boundIndex = 0, 191 genericLocation = {1, 0}) 192 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, 193 paramIndex = 0, boundIndex = 0, 194 genericLocation = {1, 0, 3, 0}) 195 public String useInParam5() { 196 return "class %TEST_CLASS_NAME% {" + 197 " interface IA {} " + 198 " class CB<XC> {} " + 199 " <T extends @TA %TEST_CLASS_NAME%. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }"; 200 } 201 202 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, 203 paramIndex = 0) 204 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, 205 paramIndex = 0, boundIndex = 0, 206 genericLocation = {}) 207 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, 208 paramIndex = 0, boundIndex = 0, 209 genericLocation = {1, 0, 3, 0}) 210 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, 211 paramIndex = 0, boundIndex = 1, 212 genericLocation = {}) 213 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, 214 paramIndex = 0, boundIndex = 1, 215 genericLocation = {3, 0}) 216 public String useInParam6() { 217 return "class %TEST_CLASS_NAME% {" + 218 " interface IA {} " + 219 " interface IB<XB> {} " + 220 " class CC<XC> {} " + 221 " interface ID<XD> {} " + 222 " <@TA T extends @TB %TEST_CLASS_NAME%.CC<@TC IA> & %TEST_CLASS_NAME%. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }"; 223 } 224 225 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 226 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 227 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 228 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 229 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 230 public String regularClassRepeatableAnnotation() { 231 return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test() { }"; 232 } 233 234 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 235 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 236 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 237 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 238 public String regularClassRepeatableAnnotation2() { 239 return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTE @RTE Cloneable> void test() { }"; 240 } 241 242 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 243 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 244 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 245 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 246 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 247 @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 248 public String regularClassParameterizedRepeatableAnnotation() { 249 return "<K extends @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object" + 250 " & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test() { }"; 251 } 252 253 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 254 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 255 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 256 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 257 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 258 public String abstractClassRepeatableAnnotation() { 259 return "abstract class %TEST_CLASS_NAME% { abstract <@RTA @RTA K extends @RTB @RTB Date," + 260 " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }"; 261 } 262 263 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 264 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 265 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 266 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 267 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 268 @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 269 public String abstractClassParameterizedRepeatableAnnotation() { 270 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTE @RTE Object &" + 271 " @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object &" + 272 " @RTC @RTC List<@RTD @RTD Object>> void test(); }"; 273 } 274 275 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 276 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 277 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 278 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 279 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}) 280 public String abstractClassParameterizedRepeatableAnnotation2() { 281 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA Map<String, @RTB @RTB String>," + 282 " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test(); }"; 283 } 284 285 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 286 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 287 public String abstractClassParameterizedRepeatableAnnotation3() { 288 return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA List<String>," + 289 " V extends @RTB @RTB List<Object>> void test(); }"; 290 } 291 292 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 293 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 294 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 295 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0) 296 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 297 public String regularInterfaceRepeatableAnnotation() { 298 return "interface %TEST_CLASS_NAME% { <@RTA @RTA K extends @RTB @RTB Date," + 299 " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }"; 300 } 301 302 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 303 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}) 304 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1) 305 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}) 306 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER, paramIndex = 1) 307 @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER, paramIndex = 0) 308 public String regularInterfaceParameterizedRepeatableAnnotation() { 309 return "interface %TEST_CLASS_NAME% { <@RTF @RTF K extends @RTA @RTA Map<String, @RTB @RTB String>," + 310 " @RTE @RTE V extends @RTC @RTC List<@RTD @RTD Object>> void test(); }"; 311 } 312 313 @TADescription(annotation = "RTAs", type = METHOD_RETURN) 314 public String useInReturnRepeatableAnnotation1() { 315 return "class %TEST_CLASS_NAME% { <T> @RTA @RTA T m() { throw new RuntimeException(); } }"; 316 } 317 318 @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {3, 0}) 319 public String useInReturnRepeatableAnnotation2() { 320 return "class %TEST_CLASS_NAME% { <T> Class<@RTA @RTA T> m() { throw new RuntimeException(); } }"; 321 } 322 323 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0) 324 @TADescription(annotation = "RTBs", type = METHOD_RETURN) 325 public String useInReturnRepeatableAnnotation3() { 326 return "class %TEST_CLASS_NAME% { <T extends @RTA @RTA Object> @RTB @RTB T m() { throw new RuntimeException(); } }"; 327 } 328 329 @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, 330 paramIndex = 0, genericLocation = {3, 0}) 331 public String useInParamRepeatableAnnotation1() { 332 return "class %TEST_CLASS_NAME% { <T> void m(Class<@RTA @RTA T> p) { throw new RuntimeException(); } }"; 333 } 334 335 @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, 336 paramIndex = 0, genericLocation = {3, 0}) 337 public String useInParamRepeatableAnnotation2() { 338 return "class %TEST_CLASS_NAME% { void m(Class<@RTA @RTA Object> p) { throw new RuntimeException(); } }"; 339 } 340 341 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1) 342 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2) 343 @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0) 344 public String useInParamRepeatableAnnotation3() { 345 return "interface IA {} " + 346 "interface IB<XB> {} " + 347 "interface IC<XC> {} " + 348 "class %TEST_CLASS_NAME% { <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" + 349 " void m(@RTC @RTC T p) { throw new RuntimeException(); } }"; 350 } 351 352 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, 353 paramIndex = 0, boundIndex = 1, 354 genericLocation = {}) 355 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, 356 paramIndex = 0, boundIndex = 2, 357 genericLocation = {}) 358 @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, 359 paramIndex = 0) 360 public String useInParamRepeatableAnnotation4() { 361 return "class %TEST_CLASS_NAME% {" + 362 " interface IA {} " + 363 " interface IB<XB> {} " + 364 " interface IC<XC> {} " + 365 " <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" + 366 " void m(@RTC @RTC T p) { throw new RuntimeException(); } }"; 367 } 368 369 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, 370 paramIndex = 0, boundIndex = 0, 371 genericLocation = {}) 372 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, 373 paramIndex = 0, boundIndex = 0, 374 genericLocation = {1, 0}) 375 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, 376 paramIndex = 0, boundIndex = 0, 377 genericLocation = {1, 0, 3, 0}) 378 public String useInParamRepeatableAnnotation5() { 379 return "class %TEST_CLASS_NAME% {" + 380 " interface IA {} " + 381 " class CB<XC> {} " + 382 " <T extends @RTA @RTA %TEST_CLASS_NAME%. @RTB @RTB" + 383 " CB<@RTC @RTC IA>> void m(T p) { throw new RuntimeException(); } }"; 384 } 385 386 @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, 387 paramIndex = 0) 388 @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, 389 paramIndex = 0, boundIndex = 0, 390 genericLocation = {}) 391 @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, 392 paramIndex = 0, boundIndex = 0, 393 genericLocation = {1, 0, 3, 0}) 394 @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, 395 paramIndex = 0, boundIndex = 1, 396 genericLocation = {}) 397 @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, 398 paramIndex = 0, boundIndex = 1, 399 genericLocation = {3, 0}) 400 public String useInParamRepeatableAnnotation6() { 401 return "class %TEST_CLASS_NAME% {" + 402 " interface IA {} " + 403 " interface IB<XB> {} " + 404 " class CC<XC> {} " + 405 " interface ID<XD> {} " + 406 " <@RTA @RTA T extends @RTB @RTB %TEST_CLASS_NAME%.CC<@RTC @RTC IA> &" + 407 " %TEST_CLASS_NAME%. @RTD @RTD ID<@RTE @RTE IA>> void m(T p) { throw new RuntimeException(); } }"; 408 } 409 }