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 }