1 /* 2 * Copyright (c) 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 /* 25 * @test 26 * @bug 8049238 27 * @summary Checks Signature attribute for array return type of method. 28 * @library /tools/lib /tools/javac/lib ../lib 29 * @modules java.desktop 30 * jdk.jdeps/com.sun.tools.classfile 31 * jdk.compiler/com.sun.tools.javac.api 32 * jdk.compiler/com.sun.tools.javac.file 33 * jdk.compiler/com.sun.tools.javac.main 34 * @build TestBase TestResult InMemoryFileManager ToolBox 35 * @build ReturnTypeTest Driver ExpectedSignature ExpectedSignatureContainer 36 * @run main Driver ReturnTypeTest 37 */ 38 39 import java.awt.Frame; 40 import java.util.List; 41 import java.util.Map; 42 import java.util.concurrent.Callable; 43 44 @ExpectedSignature(descriptor = "ReturnTypeTest", 45 signature = "<T:Ljava/awt/Frame;:Ljava/lang/Runnable;:Ljava/util/concurrent/Callable<[TT;>;>Ljava/lang/Object;") 46 public class ReturnTypeTest<T extends Frame & Runnable & Callable<T[]>> { 47 48 @ExpectedSignature(descriptor = "byteArrayReturnType(java.awt.Frame)", 49 signature = "(TT;)[B") 50 byte[] byteArrayReturnType(T a) { 51 return null; 52 } 53 54 @ExpectedSignature(descriptor = "shortArrayReturnType(java.awt.Frame)", 55 signature = "(TT;)[S") 56 short[] shortArrayReturnType(T a) { 57 return null; 58 } 59 60 @ExpectedSignature(descriptor = "charArrayReturnType(java.awt.Frame)", 61 signature = "(TT;)[C") 62 char[] charArrayReturnType(T a) { 63 return null; 64 } 65 66 @ExpectedSignature(descriptor = "intArrayReturnType(java.awt.Frame)", 67 signature = "(TT;)[I") 68 int[] intArrayReturnType(T a) { 69 return null; 70 } 71 72 @ExpectedSignature(descriptor = "longArrayReturnType(java.awt.Frame)", 73 signature = "(TT;)[J") 74 long[] longArrayReturnType(T a) { 75 return null; 76 } 77 78 @ExpectedSignature(descriptor = "booleanArrayReturnType(java.awt.Frame)", 79 signature = "(TT;)[Z") 80 boolean[] booleanArrayReturnType(T a) { 81 return null; 82 } 83 84 @ExpectedSignature(descriptor = "floatArrayReturnType(java.awt.Frame)", 85 signature = "(TT;)[F") 86 float[] floatArrayReturnType(T a) { 87 return null; 88 } 89 90 @ExpectedSignature(descriptor = "doubleArrayReturnType(java.awt.Frame)", 91 signature = "(TT;)[D") 92 double[] doubleArrayReturnType(T a) { 93 return null; 94 } 95 96 @ExpectedSignature(descriptor = "objectArrayReturnType(java.awt.Frame)", 97 signature = "(TT;)[Ljava/lang/Object;") 98 Object[] objectArrayReturnType(T a) { 99 return null; 100 } 101 102 @ExpectedSignature(descriptor = "staticByteArrayReturnType(java.lang.Object)", 103 signature = "<T:Ljava/lang/Object;>(TT;)[B") 104 static <T> byte[] staticByteArrayReturnType(T a) { 105 return null; 106 } 107 108 @ExpectedSignature(descriptor = "staticShortArrayReturnType(java.lang.Object)", 109 signature = "<T:Ljava/lang/Object;>(TT;)[S") 110 static <T> short[] staticShortArrayReturnType(T a) { 111 return null; 112 } 113 114 @ExpectedSignature(descriptor = "staticCharArrayReturnType(java.lang.Object)", 115 signature = "<T:Ljava/lang/Object;>(TT;)[C") 116 static <T> char[] staticCharArrayReturnType(T a) { 117 return null; 118 } 119 120 @ExpectedSignature(descriptor = "staticIntArrayReturnType(java.lang.Object)", 121 signature = "<T:Ljava/lang/Object;>(TT;)[I") 122 static <T> int[] staticIntArrayReturnType(T a) { 123 return null; 124 } 125 126 @ExpectedSignature(descriptor = "staticLongArrayReturnType(java.lang.Object)", 127 signature = "<T:Ljava/lang/Object;>(TT;)[J") 128 static <T> long[] staticLongArrayReturnType(T a) { 129 return null; 130 } 131 132 @ExpectedSignature(descriptor = "staticBooleanArrayReturnType(java.lang.Object)", 133 signature = "<T:Ljava/lang/Object;>(TT;)[Z") 134 static <T> boolean[] staticBooleanArrayReturnType(T a) { 135 return null; 136 } 137 138 @ExpectedSignature(descriptor = "staticFloatArrayReturnType(java.lang.Object)", 139 signature = "<T:Ljava/lang/Object;>(TT;)[F") 140 static <T> float[] staticFloatArrayReturnType(T a) { 141 return null; 142 } 143 144 @ExpectedSignature(descriptor = "staticDoubleArrayReturnType(java.lang.Object)", 145 signature = "<T:Ljava/lang/Object;>(TT;)[D") 146 static <T> double[] staticDoubleArrayReturnType(T a) { 147 return null; 148 } 149 150 @ExpectedSignature(descriptor = "staticObjectArrayReturnType(java.lang.Object)", 151 signature = "<T:Ljava/lang/Object;>(TT;)[Ljava/lang/Object;") 152 static <T> Object[] staticObjectArrayReturnType(T a) { 153 return null; 154 } 155 156 byte[] byteArrayReturnTypeNoSignatureAttribute() { 157 return null; 158 } 159 160 short[] shortArrayReturnTypeNoSignatureAttribute() { 161 return null; 162 } 163 164 char[] charArrayReturnTypeNoSignatureAttribute() { 165 return null; 166 } 167 168 int[] intArrayReturnTypeNoSignatureAttribute() { 169 return null; 170 } 171 172 long[] longArrayReturnTypeNoSignatureAttribute() { 173 return null; 174 } 175 176 boolean[] booleanArrayReturnTypeNoSignatureAttribute() { 177 return null; 178 } 179 180 float[] floatArrayReturnTypeNoSignatureAttribute() { 181 return null; 182 } 183 184 double[] doubleArrayReturnTypeNoSignatureAttribute() { 185 return null; 186 } 187 188 Object[] objectArrayReturnTypeNoSignatureAttribute() { 189 return null; 190 } 191 192 static byte[] staticByteArrayReturnTypeNoSignatureAttribute() { 193 return null; 194 } 195 196 static short[] staticShortArrayReturnTypeNoSignatureAttribute() { 197 return null; 198 } 199 200 static char[] staticCharArrayReturnTypeNoSignatureAttribute() { 201 return null; 202 } 203 204 static int[] staticIntArrayReturnTypeNoSignatureAttribute() { 205 return null; 206 } 207 208 static long[] staticLongArrayReturnTypeNoSignatureAttribute() { 209 return null; 210 } 211 212 static boolean[] staticBooleanArrayReturnTypeNoSignatureAttribute() { 213 return null; 214 } 215 216 static float[] staticFloatArrayReturnTypeNoSignatureAttribute() { 217 return null; 218 } 219 220 static double[] staticDoubleArrayReturnTypeNoSignatureAttribute() { 221 return null; 222 } 223 224 static Object[] staticObjectArrayReturnTypeNoSignatureAttribute() { 225 return null; 226 } 227 228 @ExpectedSignature(descriptor = "typeReturnType()", 229 signature = "()TT;") 230 T typeReturnType() { 231 return null; 232 } 233 234 @ExpectedSignature(descriptor = "typeArrayReturnType()", 235 signature = "()[TT;") 236 T[] typeArrayReturnType() { 237 return null; 238 } 239 240 @ExpectedSignature(descriptor = "extendsReturnType()", 241 signature = "<E:TT;>()TE;") 242 <E extends T> E extendsReturnType() { 243 return null; 244 } 245 246 @ExpectedSignature(descriptor = "extendsArrayReturnType()", 247 signature = "<E:TT;>()[TE;") 248 <E extends T> E[] extendsArrayReturnType() { 249 return null; 250 } 251 252 @ExpectedSignature(descriptor = "genericListReturnType()", 253 signature = "()Ljava/util/List<TT;>;") 254 List<T> genericListReturnType() { 255 return null; 256 } 257 258 @ExpectedSignature(descriptor = "genericListArrayReturnType()", 259 signature = "()[Ljava/util/List<TT;>;") 260 List<T>[] genericListArrayReturnType() { 261 return null; 262 } 263 264 @ExpectedSignature(descriptor = "extendsBoundReturnType()", 265 signature = "()Ljava/util/List<+TT;>;") 266 List<? extends T> extendsBoundReturnType() { 267 return null; 268 } 269 270 @ExpectedSignature(descriptor = "extendsBoundArrayReturnType()", 271 signature = "()[Ljava/util/List<+TT;>;") 272 List<? extends T>[] extendsBoundArrayReturnType() { 273 return null; 274 } 275 276 @ExpectedSignature(descriptor = "superBoundReturnType()", 277 signature = "()Ljava/util/List<-TT;>;") 278 List<? super T> superBoundReturnType() { 279 return null; 280 } 281 282 @ExpectedSignature(descriptor = "superBoundArrayReturnType()", 283 signature = "()[Ljava/util/List<-TT;>;") 284 List<? super T>[] superBoundArrayReturnType() { 285 return null; 286 } 287 288 @ExpectedSignature(descriptor = "wildcardReturnType()", 289 signature = "()Ljava/util/Map<**>;") 290 Map<?, ?> wildcardReturnType() { 291 return null; 292 } 293 294 @ExpectedSignature(descriptor = "wildcardArrayReturnType()", 295 signature = "()[Ljava/util/Map<**>;") 296 Map<?, ?>[] wildcardArrayReturnType() { 297 return null; 298 } 299 300 @ExpectedSignature(descriptor = "staticTypeReturnType()", 301 signature = "<T:Ljava/lang/Object;>()TT;") 302 static <T> T staticTypeReturnType() { 303 return null; 304 } 305 306 @ExpectedSignature(descriptor = "staticTypeArrayReturnType()", 307 signature = "<T:Ljava/lang/Object;>()[TT;") 308 static <T> T[] staticTypeArrayReturnType() { 309 return null; 310 } 311 312 @ExpectedSignature(descriptor = "staticExtendsReturnType()", 313 signature = "<T:Ljava/lang/Object;E:TT;>()TE;") 314 static <T, E extends T> E staticExtendsReturnType() { 315 return null; 316 } 317 318 @ExpectedSignature(descriptor = "staticExtendsArrayReturnType()", 319 signature = "<T:Ljava/lang/Object;E:TT;>()[TE;") 320 static <T, E extends T> E[] staticExtendsArrayReturnType() { 321 return null; 322 } 323 324 @ExpectedSignature(descriptor = "staticGenericListReturnType()", 325 signature = "<T:Ljava/lang/Object;>()Ljava/util/List<TT;>;") 326 static <T> List<T> staticGenericListReturnType() { 327 return null; 328 } 329 330 @ExpectedSignature(descriptor = "staticGenericListArrayReturnType()", 331 signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<TT;>;") 332 static <T> List<T>[] staticGenericListArrayReturnType() { 333 return null; 334 } 335 336 @ExpectedSignature(descriptor = "staticExtendsBoundReturnType()", 337 signature = "<T:Ljava/lang/Object;>()Ljava/util/List<+TT;>;") 338 static <T> List<? extends T> staticExtendsBoundReturnType() { 339 return null; 340 } 341 342 @ExpectedSignature(descriptor = "staticExtendsBoundArrayReturnType()", 343 signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<+TT;>;") 344 static <T> List<? extends T>[] staticExtendsBoundArrayReturnType() { 345 return null; 346 } 347 348 @ExpectedSignature(descriptor = "staticSuperBoundReturnType()", 349 signature = "<T:Ljava/lang/Object;>()Ljava/util/List<-TT;>;") 350 static <T> List<? super T> staticSuperBoundReturnType() { 351 return null; 352 } 353 354 @ExpectedSignature(descriptor = "staticSuperBoundArrayReturnType()", 355 signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<-TT;>;") 356 static <T> List<? super T>[] staticSuperBoundArrayReturnType() { 357 return null; 358 } 359 360 @ExpectedSignature(descriptor = "staticWildcardReturnType()", 361 signature = "()Ljava/util/Map<**>;") 362 static Map<?, ?> staticWildcardReturnType() { 363 return null; 364 } 365 366 @ExpectedSignature(descriptor = "staticWildcardArrayReturnType()", 367 signature = "()[Ljava/util/Map<**>;") 368 static Map<?, ?>[] staticWildcardArrayReturnType() { 369 return null; 370 } 371 372 List noSignature() { 373 return null; 374 } 375 376 static List staticNoSignatureAttribute() { 377 return null; 378 } 379 380 @ExpectedSignature(descriptor = "boundsBooleanArray()", 381 signature = "()Ljava/util/Map<+[Z-[Z>;") 382 Map<? extends boolean[], ? super boolean[]> boundsBooleanArray() { 383 return null; 384 } 385 386 @ExpectedSignature(descriptor = "boundsByteArray()", 387 signature = "()Ljava/util/Map<+[B-[B>;") 388 Map<? extends byte[], ? super byte[]> boundsByteArray() { 389 return null; 390 } 391 392 @ExpectedSignature(descriptor = "boundsShortArray()", 393 signature = "()Ljava/util/Map<+[S-[S>;") 394 Map<? extends short[], ? super short[]> boundsShortArray() { 395 return null; 396 } 397 398 @ExpectedSignature(descriptor = "boundsIntArray()", 399 signature = "()Ljava/util/Map<+[I-[I>;") 400 Map<? extends int[], ? super int[]> boundsIntArray() { 401 return null; 402 } 403 404 @ExpectedSignature(descriptor = "boundsLongArray()", 405 signature = "()Ljava/util/Map<+[J-[J>;") 406 Map<? extends long[], ? super long[]> boundsLongArray() { 407 return null; 408 } 409 410 @ExpectedSignature(descriptor = "boundsCharArray()", 411 signature = "()Ljava/util/Map<+[C-[C>;") 412 Map<? extends char[], ? super char[]> boundsCharArray() { 413 return null; 414 } 415 416 @ExpectedSignature(descriptor = "boundsFloatArray()", 417 signature = "()Ljava/util/Map<+[F-[F>;") 418 Map<? extends float[], ? super float[]> boundsFloatArray() { 419 return null; 420 } 421 422 @ExpectedSignature(descriptor = "boundsDoubleArray()", 423 signature = "()Ljava/util/Map<+[D-[D>;") 424 Map<? extends double[], ? super double[]> boundsDoubleArray() { 425 return null; 426 } 427 428 @ExpectedSignature(descriptor = "boundsObjectArray()", 429 signature = "()Ljava/util/Map<+[Ljava/lang/Object;-[Ljava/lang/Object;>;") 430 Map<? extends Object[], ? super Object[]> boundsObjectArray() { 431 return null; 432 } 433 434 @ExpectedSignature(descriptor = "voidMethod(java.awt.Frame)", signature = "(TT;)V") 435 void voidMethod(T a) { 436 } 437 438 @ExpectedSignature(descriptor = "byteMethod(java.awt.Frame)", signature = "(TT;)B") 439 byte byteMethod(T a) { 440 return 0; 441 } 442 443 @ExpectedSignature(descriptor = "shortMethod(java.awt.Frame)", signature = "(TT;)S") 444 short shortMethod(T a) { 445 return 0; 446 } 447 448 @ExpectedSignature(descriptor = "charMethod(java.awt.Frame)", signature = "(TT;)C") 449 char charMethod(T a) { 450 return 0; 451 } 452 453 @ExpectedSignature(descriptor = "intMethod(java.awt.Frame)", signature = "(TT;)I") 454 int intMethod(T a) { 455 return 0; 456 } 457 458 @ExpectedSignature(descriptor = "longMethod(java.awt.Frame)", signature = "(TT;)J") 459 long longMethod(T a) { 460 return 0; 461 } 462 463 @ExpectedSignature(descriptor = "booleanMethod(java.awt.Frame)", signature = "(TT;)Z") 464 boolean booleanMethod(T a) { 465 return false; 466 } 467 468 @ExpectedSignature(descriptor = "floatMethod(java.awt.Frame)", signature = "(TT;)F") 469 float floatMethod(T a) { 470 return 0; 471 } 472 473 @ExpectedSignature(descriptor = "doubleMethod(java.awt.Frame)", signature = "(TT;)D") 474 double doubleMethod(T a) { 475 return 0; 476 } 477 478 @ExpectedSignature(descriptor = "objectMethod(java.awt.Frame)", signature = "(TT;)Ljava/lang/Object;") 479 Object objectMethod(T a) { 480 return null; 481 } 482 483 @ExpectedSignature(descriptor = "staticVoidMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)V") 484 static <T> void staticVoidMethod(T a) { 485 } 486 487 @ExpectedSignature(descriptor = "staticByteMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)B") 488 static <T> byte staticByteMethod(T a) { 489 return 0; 490 } 491 492 @ExpectedSignature(descriptor = "staticShortMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)S") 493 static <T> short staticShortMethod(T a) { 494 return 0; 495 } 496 497 @ExpectedSignature(descriptor = "staticCharMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)C") 498 static <T> char staticCharMethod(T a) { 499 return 0; 500 } 501 502 @ExpectedSignature(descriptor = "staticIntMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)I") 503 static <T> int staticIntMethod(T a) { 504 return 0; 505 } 506 507 @ExpectedSignature(descriptor = "staticLongMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)J") 508 static <T> long staticLongMethod(T a) { 509 return 0; 510 } 511 512 @ExpectedSignature(descriptor = "staticBooleanMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)Z") 513 static <T> boolean staticBooleanMethod(T a) { 514 return false; 515 } 516 517 @ExpectedSignature(descriptor = "staticFloatMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)F") 518 static <T> float staticFloatMethod(T a) { 519 return 0; 520 } 521 522 @ExpectedSignature(descriptor = "staticDoubleMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)D") 523 static <T> double staticDoubleMethod(T a) { 524 return 0; 525 } 526 527 @ExpectedSignature(descriptor = "staticObjectMethod(java.lang.Object)", 528 signature = "<T:Ljava/lang/Object;>(TT;)Ljava/lang/Object;") 529 static <T> Object staticObjectMethod(T a) { 530 return null; 531 } 532 533 void voidReturnTypeNoSignatureAttribute() { 534 } 535 536 byte byteReturnTypeNoSignatureAttribute() { 537 return 0; 538 } 539 540 Object objectReturnNoSignatureAttribute() { 541 return null; 542 } 543 544 static void staticVoidReturnTypeNoSignatureAttribute() { 545 } 546 547 static byte staticByteReturnTypeNoSignatureAttribute() { 548 return 0; 549 } 550 551 static Object staticObjectReturnTypeNoSignatureAttribute() { 552 return null; 553 } 554 }