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

Thu, 31 Aug 2017 15:17:03 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:17:03 +0800
changeset 2525
2eb010b6cb22
parent 2227
998b10c43157
parent 0
959103a6100f
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 */
aoqi@0 23
aoqi@0 24 import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
aoqi@0 25
aoqi@0 26 /*
aoqi@0 27 * @test
aoqi@0 28 * @summary Test population of reference info for method type parameters
aoqi@0 29 * @compile -g Driver.java ReferenceInfoUtil.java MethodTypeParam.java
aoqi@0 30 * @run main Driver MethodTypeParam
aoqi@0 31 */
aoqi@0 32 public class MethodTypeParam {
aoqi@0 33
aoqi@0 34 @TADescriptions({
aoqi@0 35 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 36 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 37 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
aoqi@0 38 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
aoqi@0 39 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
aoqi@0 40 })
aoqi@0 41 public String regularClass() {
aoqi@0 42 return "<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test() { }";
aoqi@0 43 }
aoqi@0 44
aoqi@0 45 @TADescriptions({
aoqi@0 46 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 47 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 48 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
aoqi@0 49 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
aoqi@0 50 })
aoqi@0 51 public String regularClass2() {
aoqi@0 52 return "<@TA K extends @TB Date, @TC V extends @TE Cloneable> void test() { }";
aoqi@0 53 }
aoqi@0 54
aoqi@0 55 @TADescriptions({
aoqi@0 56 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 57 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
aoqi@0 58 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
aoqi@0 59 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
aoqi@0 60 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
aoqi@0 61 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
aoqi@0 62 })
aoqi@0 63 public String regularClassParameterized() {
aoqi@0 64 return "<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test() { }";
aoqi@0 65 }
aoqi@0 66
aoqi@0 67 @TADescriptions({
aoqi@0 68 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 69 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 70 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
aoqi@0 71 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
aoqi@0 72 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
aoqi@0 73 })
aoqi@0 74 public String abstractClass() {
aoqi@0 75 return "abstract class Test { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
aoqi@0 76 }
aoqi@0 77
aoqi@0 78 @TADescriptions({
aoqi@0 79 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 80 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
aoqi@0 81 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
aoqi@0 82 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
aoqi@0 83 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
aoqi@0 84 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
aoqi@0 85 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
aoqi@0 86 })
aoqi@0 87 public String abstractClassParameterized() {
aoqi@0 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(); }";
aoqi@0 89 }
aoqi@0 90
aoqi@0 91 @TADescriptions({
aoqi@0 92 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 93 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
aoqi@0 94 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
aoqi@0 95 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
aoqi@0 96 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
aoqi@0 97 })
aoqi@0 98 public String abstractClassParameterized2() {
aoqi@0 99 return "abstract class Test { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
aoqi@0 100 }
aoqi@0 101
aoqi@0 102 @TADescriptions({
aoqi@0 103 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 104 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
aoqi@0 105 })
aoqi@0 106 public String abstractClassParameterized3() {
aoqi@0 107 return "abstract class Test { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
aoqi@0 108 }
aoqi@0 109
aoqi@0 110 @TADescriptions({
aoqi@0 111 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 112 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 113 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
aoqi@0 114 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
aoqi@0 115 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
aoqi@0 116 })
aoqi@0 117 public String regularInterface() {
aoqi@0 118 return "interface Test { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
aoqi@0 119 }
aoqi@0 120
aoqi@0 121 @TADescriptions({
aoqi@0 122 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 123 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
aoqi@0 124 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
aoqi@0 125 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
aoqi@0 126 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
aoqi@0 127 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
aoqi@0 128 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 129 @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 130 @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
aoqi@0 131 })
aoqi@0 132 public String regularInterfaceParameterized() {
aoqi@0 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(); }";
aoqi@0 134 }
aoqi@0 135
aoqi@0 136 @TADescriptions({
aoqi@0 137 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 138 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
aoqi@0 139 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
aoqi@0 140 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
aoqi@0 141 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
aoqi@0 142 @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
aoqi@0 143 @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
aoqi@0 144 })
aoqi@0 145 public String regularInterfaceParameterized2() {
aoqi@0 146 return "interface Test { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
aoqi@0 147 }
aoqi@0 148
aoqi@0 149 @TADescription(annotation = "TA", type = METHOD_RETURN)
aoqi@0 150 public String useInReturn1() {
aoqi@0 151 return "class Test { <T> @TA T m() { throw new RuntimeException(); } }";
aoqi@0 152 }
aoqi@0 153
aoqi@0 154 @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
aoqi@0 155 public String useInReturn2() {
aoqi@0 156 return "class Test { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
aoqi@0 157 }
aoqi@0 158
aoqi@0 159 @TADescriptions({
aoqi@0 160 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
aoqi@0 161 @TADescription(annotation = "TB", type = METHOD_RETURN)
aoqi@0 162 })
aoqi@0 163 public String useInReturn3() {
aoqi@0 164 return "class Test { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
aoqi@0 165 }
aoqi@0 166
aoqi@0 167 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
aoqi@0 168 paramIndex = 0, genericLocation = {3, 0})
aoqi@0 169 public String useInParam1() {
aoqi@0 170 return "class Test { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
aoqi@0 171 }
aoqi@0 172
aoqi@0 173 @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
aoqi@0 174 paramIndex = 0, genericLocation = {3, 0})
aoqi@0 175 public String useInParam2() {
aoqi@0 176 return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
aoqi@0 177 }
aoqi@0 178
aoqi@0 179 @TADescriptions({
aoqi@0 180 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
aoqi@0 181 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2),
aoqi@0 182 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
aoqi@0 183 })
aoqi@0 184 public String useInParam3() {
aoqi@0 185 return "interface IA {} " +
aoqi@0 186 "interface IB<XB> {} " +
aoqi@0 187 "interface IC<XC> {} " +
aoqi@0 188 "class Test { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
aoqi@0 189 }
aoqi@0 190
aoqi@0 191 @TADescriptions({
aoqi@0 192 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 193 paramIndex = 0, boundIndex = 1,
aoqi@0 194 genericLocation = {}),
aoqi@0 195 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 196 paramIndex = 0, boundIndex = 2,
aoqi@0 197 genericLocation = {}),
aoqi@0 198 @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
aoqi@0 199 paramIndex = 0)
aoqi@0 200 })
aoqi@0 201 public String useInParam4() {
aoqi@0 202 return "class Test {" +
aoqi@0 203 " interface IA {} " +
aoqi@0 204 " interface IB<XB> {} " +
aoqi@0 205 " interface IC<XC> {} " +
aoqi@0 206 " <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
aoqi@0 207 }
aoqi@0 208
aoqi@0 209 @TADescriptions({
aoqi@0 210 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 211 paramIndex = 0, boundIndex = 0,
aoqi@0 212 genericLocation = {}),
aoqi@0 213 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 214 paramIndex = 0, boundIndex = 0,
aoqi@0 215 genericLocation = {1, 0}),
aoqi@0 216 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 217 paramIndex = 0, boundIndex = 0,
aoqi@0 218 genericLocation = {1, 0, 3, 0}),
aoqi@0 219 })
aoqi@0 220 public String useInParam5() {
aoqi@0 221 return "class Test {" +
aoqi@0 222 " interface IA {} " +
aoqi@0 223 " class CB<XC> {} " +
aoqi@0 224 " <T extends @TA Test. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
aoqi@0 225 }
aoqi@0 226
aoqi@0 227 @TADescriptions({
aoqi@0 228 @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
aoqi@0 229 paramIndex = 0),
aoqi@0 230 @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 231 paramIndex = 0, boundIndex = 0,
aoqi@0 232 genericLocation = {}),
aoqi@0 233 @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 234 paramIndex = 0, boundIndex = 0,
aoqi@0 235 genericLocation = {1, 0, 3, 0}),
aoqi@0 236 @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 237 paramIndex = 0, boundIndex = 1,
aoqi@0 238 genericLocation = {}),
aoqi@0 239 @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
aoqi@0 240 paramIndex = 0, boundIndex = 1,
aoqi@0 241 genericLocation = {3, 0})
aoqi@0 242 })
aoqi@0 243 public String useInParam6() {
aoqi@0 244 return "class Test {" +
aoqi@0 245 " interface IA {} " +
aoqi@0 246 " interface IB<XB> {} " +
aoqi@0 247 " class CC<XC> {} " +
aoqi@0 248 " interface ID<XD> {} " +
aoqi@0 249 " <@TA T extends @TB Test.CC<@TC IA> & Test. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
aoqi@0 250 }
aoqi@0 251 }

mercurial