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

Tue, 24 Dec 2013 09:17:37 -0800

author
ksrini
date
Tue, 24 Dec 2013 09:17:37 -0800
changeset 2227
998b10c43157
parent 1534
bec996065c45
child 2525
2eb010b6cb22
permissions
-rw-r--r--

8029230: Update copyright year to match last edit in jdk8 langtools repository for 2013
Reviewed-by: ksrini
Contributed-by: steve.sides@oracle.com

     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  */
    24 import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
    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 {
    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     }
    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     }
    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     }
    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     }
    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     }
    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     }
   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     }
   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     }
   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     }
   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     }
   149     @TADescription(annotation = "TA", type = METHOD_RETURN)
   150     public String useInReturn1() {
   151         return "class Test { <T> @TA T m() { throw new RuntimeException(); } }";
   152     }
   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     }
   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     }
   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     }
   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     }
   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     }
   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     }
   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     }
   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