test/tools/javap/output/RepeatingTypeAnnotations.java

Fri, 03 May 2013 09:56:56 -0700

author
jjg
date
Fri, 03 May 2013 09:56:56 -0700
changeset 1721
abd153854f16
parent 1643
1f8c28134ffc
child 1755
ddb4a2bfcd82
permissions
-rw-r--r--

8012728: Normalize @ignore comments on langtools tests
Reviewed-by: vromero, mcimadamore

jjg@1643 1 /*
jjg@1643 2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
jjg@1643 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jjg@1643 4 *
jjg@1643 5 * This code is free software; you can redistribute it and/or modify it
jjg@1643 6 * under the terms of the GNU General Public License version 2 only, as
jjg@1643 7 * published by the Free Software Foundation.
jjg@1643 8 *
jjg@1643 9 * This code is distributed in the hope that it will be useful, but WITHOUT
jjg@1643 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jjg@1643 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
jjg@1643 12 * version 2 for more details (a copy is included in the LICENSE file that
jjg@1643 13 * accompanied this code).
jjg@1643 14 *
jjg@1643 15 * You should have received a copy of the GNU General Public License version
jjg@1643 16 * 2 along with this work; if not, write to the Free Software Foundation,
jjg@1643 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jjg@1643 18 *
jjg@1643 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
jjg@1643 20 * or visit www.oracle.com if you need additional information or have any
jjg@1643 21 * questions.
jjg@1643 22 */
jjg@1643 23
jjg@1643 24 /*
jjg@1643 25 * @test
jjg@1643 26 * @bug 8005220
jjg@1643 27 * @summary javap must display repeating annotations
jjg@1643 28 */
jjg@1643 29 import java.io.*;
jjg@1643 30 import java.util.*;
jjg@1643 31
jjg@1643 32 /**
jjg@1643 33 * This class extends the abstract {@link Tester} test-driver, and
jjg@1643 34 * encapusulates a number of test-case classes (i.e. classes extending
jjg@1643 35 * this class and annotated with {@code TestCase}).
jjg@1643 36 * <p>
jjg@1643 37 * By default (no argument), this test runs all test-cases, except
jjg@1643 38 * if annotated with {@code ignore}.
jjg@1643 39 * <p>
jjg@1643 40 * Individual test cases can be executed using a run action.
jjg@1643 41 * <p>
jjg@1643 42 * Example: @run main RepeatingTypeAnnotations RepeatingTypeAnnotations$TC4
jjg@1643 43 * <p>
jjg@1643 44 * Note: when specific test-cases are run, additional debug output is
jjg@1643 45 * produced to help debugging. Test annotated with {@code ignore}
jjg@1643 46 * can be executed explicitly.
jjg@1643 47 */
jjg@1643 48 public class RepeatingTypeAnnotations extends Tester {
jjg@1643 49
jjg@1643 50 /**
jjg@1643 51 * Main method instantiates test and run test-cases.
jjg@1643 52 */
jjg@1643 53 public static void main(String... args) throws Exception {
jjg@1643 54 Tester tester = new RepeatingTypeAnnotations();
jjg@1643 55 tester.run(args);
jjg@1643 56 }
jjg@1643 57
jjg@1643 58 /**
jjg@1643 59 * Testcases are classes extending {@code RepeatingTypeAnnotations},
jjg@1643 60 * and calling {@link setSrc}, followed by one or more invocations
jjg@1643 61 * of {@link verify} in the body of the constructor.
jjg@1643 62 */
jjg@1643 63 public RepeatingTypeAnnotations() {
jjg@1643 64 setSrc(new TestSource(template));
jjg@1643 65 }
jjg@1643 66
jjg@1643 67 /**
jjg@1643 68 * Common template for test cases. The line TESTCASE is
jjg@1643 69 * replaced with the specific lines of individual tests.
jjg@1643 70 */
jjg@1643 71 private static final String[] template = {
jjg@1643 72 "import java.lang.annotation.*;",
jjg@1643 73 "class Test {",
jjg@1643 74 " @Repeatable(As.class)",
jjg@1643 75 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 76 " @Retention(RetentionPolicy.CLASS)",
jjg@1643 77 " @interface A {",
jjg@1643 78 " Class f() default int.class;",
jjg@1643 79 " }",
jjg@1643 80
jjg@1643 81 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 82 " @Retention(RetentionPolicy.CLASS)",
jjg@1643 83 " @interface As { A[] value(); }",
jjg@1643 84
jjg@1643 85 " @Repeatable(Bs.class)",
jjg@1643 86 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 87 " @Retention(RetentionPolicy.CLASS)",
jjg@1643 88 " @interface B {",
jjg@1643 89 " Class f() default int.class;",
jjg@1643 90 " }",
jjg@1643 91
jjg@1643 92 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 93 " @Retention(RetentionPolicy.CLASS)",
jjg@1643 94 " @interface Bs { B[] value(); }",
jjg@1643 95
jjg@1643 96 " @Repeatable(Cs.class)",
jjg@1643 97 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 98 " @Retention(RetentionPolicy.RUNTIME)",
jjg@1643 99 " @interface C {",
jjg@1643 100 " Class f() default int.class;",
jjg@1643 101 " }",
jjg@1643 102
jjg@1643 103 " @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})",
jjg@1643 104 " @Retention(RetentionPolicy.RUNTIME)",
jjg@1643 105 " @interface Cs { C[] value(); }",
jjg@1643 106 "TESTCASE",
jjg@1643 107 "}"
jjg@1643 108 };
jjg@1643 109
jjg@1643 110 /*
jjg@1643 111 * The test cases covers annotation in the following locations:
jjg@1643 112 * - static and non-static fields
jjg@1643 113 * - local variables
jjg@1643 114 * - constructor and method return type and parameter types
jjg@1643 115 * - casts in class and method contexts.
jjg@1643 116 * For the above locations the test-cases covers:
jjg@1643 117 * - single annotation type
jjg@1643 118 * - two annotation types with same retention
jjg@1643 119 * - two annotation types with different retention
jjg@1643 120 * - three annotation types, two of same retention, one different.
jjg@1643 121 */
jjg@1643 122
jjg@1643 123 @TestCase
jjg@1721 124 @ignore // 8008082: missing type annotation for cast
jjg@1643 125 public static class TC1 extends RepeatingTypeAnnotations {
jjg@1643 126 public TC1() {
jjg@1643 127 setSrc(" static String so = \"hello world\";",
jjg@1643 128 " public @A @A @A Object o = (@A @A @A String) Test.so;");
jjg@1643 129 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 130 "0: #25(#26=[@#27(),@#27(),@#27()]): FIELD",
jjg@1643 131 "1: #25(#26=[@#27(),@#27(),@#27()]): CAST, offset=5");
jjg@1643 132 }
jjg@1643 133 }
jjg@1643 134
jjg@1643 135 @TestCase
jjg@1643 136 public static class TC2 extends RepeatingTypeAnnotations {
jjg@1643 137 public TC2() {
jjg@1643 138 setSrc(" static String so = \"hello world\";",
jjg@1643 139 " public @A @B @A Object o = (@B @A @B String) Test.so;");
jjg@1643 140 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 141 "0: #25(#26=[@#27(),@#27()]): FIELD",
jjg@1643 142 "1: #28(): FIELD",
jjg@1643 143 "2: #29(#26=[@#28(),@#28()]): CAST, offset=5",
jjg@1643 144 "3: #27(): CAST, offset=5");
jjg@1643 145 }
jjg@1643 146 }
jjg@1643 147
jjg@1643 148 @TestCase
jjg@1643 149 public static class TC3 extends RepeatingTypeAnnotations {
jjg@1643 150 public TC3() {
jjg@1643 151 setSrc(" static String so = \"hello world\";",
jjg@1643 152 " public @A @A @C Object o = (@B @C @B String) Test.so;");
jjg@1643 153 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 154 "0: #25(): FIELD",
jjg@1643 155 "1: #25(): CAST, offset=5",
jjg@1643 156 "RuntimeVisibleTypeAnnotations",
jjg@1643 157 "0: #27(#28=[@#29(),@#29()]): FIELD",
jjg@1643 158 "1: #30(#28=[@#31(),@#31()]): CAST, offset=5");
jjg@1643 159 }
jjg@1643 160 }
jjg@1643 161
jjg@1643 162 @TestCase
jjg@1643 163 public static class TC4 extends RepeatingTypeAnnotations {
jjg@1643 164 public TC4() {
jjg@1643 165 setSrc(" static String so = \"hello world\";",
jjg@1643 166 " public @A @B @C Object o = (@C @B @A String) Test.so;");
jjg@1643 167 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 168 "RuntimeVisibleTypeAnnotations",
jjg@1643 169 "0: #25(): FIELD",
jjg@1643 170 "1: #25(): CAST, offset=5",
jjg@1643 171 "0: #27(): FIELD",
jjg@1643 172 "1: #28(): FIELD",
jjg@1643 173 "2: #28(): CAST, offset=5",
jjg@1643 174 "3: #27(): CAST, offset=5");
jjg@1643 175 }
jjg@1643 176 }
jjg@1643 177
jjg@1643 178 @TestCase
jjg@1721 179 @ignore // 8008082: missing type annotation for cast
jjg@1643 180 public static class TC5 extends RepeatingTypeAnnotations {
jjg@1643 181 public TC5() {
jjg@1643 182 setSrc(" static String so = \"hello world\";",
jjg@1643 183 " public static @A @A @A Object o = (@B @B @B String) Test.so;");
jjg@1643 184 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 185 "0: #25(#26=[@#27(),@#27(),@#27()]): FIELD",
jjg@1643 186 "1: #28(#26=[@#29(),@#29(),@#29()]): CAST, offset=5, type_index=0");
jjg@1643 187 }
jjg@1643 188 }
jjg@1643 189
jjg@1643 190 @TestCase
jjg@1643 191 public static class TC6 extends RepeatingTypeAnnotations {
jjg@1643 192 public TC6() {
jjg@1643 193 setSrc(" static String so = \"hello world\";",
jjg@1643 194 " public static @A @B @A Object o = (@B @A @B String) Test.so;");
jjg@1643 195 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 196 "0: #25(#26=[@#27(),@#27()]): FIELD",
jjg@1643 197 "1: #28(): FIELD",
jjg@1643 198 "2: #29(#26=[@#28(),@#28()]): CAST, offset=5",
jjg@1643 199 "3: #27(): CAST, offset=5");
jjg@1643 200 }
jjg@1643 201 }
jjg@1643 202
jjg@1643 203 @TestCase
jjg@1643 204 public static class TC7 extends RepeatingTypeAnnotations {
jjg@1643 205 public TC7() {
jjg@1643 206 setSrc(" static String so = \"hello world\";",
jjg@1643 207 " public static @A @A @C Object o = (@B @C @B String) Test.so;");
jjg@1643 208 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 209 "RuntimeVisibleTypeAnnotations",
jjg@1643 210 "0: #25(): FIELD",
jjg@1643 211 "1: #25(): CAST, offset=5",
jjg@1643 212 "0: #27(#28=[@#29(),@#29()]): FIELD",
jjg@1643 213 "1: #30(#28=[@#31(),@#31()]): CAST, offset=5");
jjg@1643 214 }
jjg@1643 215 }
jjg@1643 216
jjg@1643 217 @TestCase
jjg@1643 218 public static class TC8 extends RepeatingTypeAnnotations {
jjg@1643 219 public TC8() {
jjg@1643 220 setSrc(" static String so = \"hello world\";",
jjg@1643 221 " public static @A @B @C Object o = (@C @B @A String) Test.so;");
jjg@1643 222 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 223 "RuntimeVisibleTypeAnnotations",
jjg@1643 224 "0: #25(): FIELD",
jjg@1643 225 "1: #25(): CAST, offset=5",
jjg@1643 226 "0: #27(): FIELD",
jjg@1643 227 "1: #28(): FIELD",
jjg@1643 228 "2: #28(): CAST, offset=5",
jjg@1643 229 "3: #27(): CAST, offset=5");
jjg@1643 230 }
jjg@1643 231 }
jjg@1643 232
jjg@1643 233 @TestCase
jjg@1721 234 @ignore // 8008082: missing type annotation for cast
jjg@1643 235 public static class TC9 extends RepeatingTypeAnnotations {
jjg@1643 236 public TC9() {
jjg@1643 237 setSrc(" public Test(@A @A @A Object o, @A int i, long l) {",
jjg@1643 238 " @A @A @A String ls = (@B @B @B String) o;",
jjg@1643 239 " }");
jjg@1643 240 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 241 "0: #34(#35=[@#36(),@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 242 "1: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 243 "2: #37(#35=[@#38(),@#38(),@#38()]): CAST, offset=4, type_index=0",
jjg@1643 244 "3: #34(#35=[@#36(),@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}");
jjg@1643 245 }
jjg@1643 246 }
jjg@1643 247
jjg@1643 248 @TestCase
jjg@1643 249 public static class TC10 extends RepeatingTypeAnnotations {
jjg@1643 250 public TC10() {
jjg@1643 251 setSrc(" public Test(@A @A @B Object o, @A @B int i, long l) {",
jjg@1643 252 " @A @A @B String ls = (@B @A @B String) o;",
jjg@1643 253 " }");
jjg@1643 254 verify("RuntimeInvisibleTypeAnnotations:",
jjg@1643 255 "0: #34(#35=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 256 "1: #37(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 257 "2: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 258 "3: #37(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 259 "4: #38(#35=[@#37(),@#37()]): CAST, offset=4, type_index=0",
jjg@1643 260 "5: #36(): CAST, offset=4, type_index=0",
jjg@1643 261 "6: #34(#35=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
jjg@1643 262 "7: #37(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}");
jjg@1643 263 }
jjg@1643 264 }
jjg@1643 265
jjg@1643 266 @TestCase
jjg@1643 267 public static class TC11 extends RepeatingTypeAnnotations {
jjg@1643 268 public TC11() {
jjg@1643 269 setSrc(" public Test(@C @C @A Object o, @A @B int i, long l) {",
jjg@1643 270 " @C @C @A String ls = (@A @A @C String) o;",
jjg@1643 271 " }");
jjg@1643 272 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 273 "RuntimeVisibleTypeAnnotations",
jjg@1643 274 "0: #34(#35=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 275 "1: #36(): CAST, offset=4",
jjg@1643 276 "2: #34(#35=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
jjg@1643 277 "0: #38(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 278 "1: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 279 "2: #39(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 280 "3: #40(#35=[@#38(),@#38()]): CAST, offset=4",
jjg@1643 281 "4: #38(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}");
jjg@1643 282 }
jjg@1643 283 }
jjg@1643 284
jjg@1643 285 @TestCase
jjg@1643 286 public static class TC12 extends RepeatingTypeAnnotations {
jjg@1643 287 public TC12() {
jjg@1643 288 setSrc(" public Test(@A @B @C Object o, @A @C int i, long l) {",
jjg@1643 289 " @A @B @C String ls = (@C @A @B String) o;",
jjg@1643 290 " }");
jjg@1643 291 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 292 "RuntimeVisibleTypeAnnotations",
jjg@1643 293 "0: #34(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 294 "1: #34(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 295 "2: #34(): CAST, offset=4",
jjg@1643 296 "3: #34(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
jjg@1643 297 "0: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 298 "1: #37(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 299 "2: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 300 "3: #36(): CAST, offset=4",
jjg@1643 301 "4: #37(): CAST, offset=4",
jjg@1643 302 "5: #36(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}",
jjg@1643 303 "6: #37(): LOCAL_VARIABLE, {start_pc=10, length=1, index=5}");
jjg@1643 304 }
jjg@1643 305 }
jjg@1643 306
jjg@1643 307 @TestCase
jjg@1721 308 @ignore // 8008082: missing type annotation for cast
jjg@1643 309 public static class TC13 extends RepeatingTypeAnnotations {
jjg@1643 310 public TC13() {
jjg@1643 311 setSrc(" public @A @A @A String foo(@A @A @A Object o, @A int i, long l) {",
jjg@1643 312 " @A @A @A String ls = (@B @B @B String) o;",
jjg@1643 313 " return (@A @A @A String) o;",
jjg@1643 314 " }");
jjg@1643 315 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 316 "0: #36(#37=[@#38(),@#38(),@#38()]): METHOD_RETURN",
jjg@1643 317 "1: #36(#37=[@#38(),@#38(),@#38()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 318 "2: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 319 "3: #39(#37=[@#40(),@#40(),@#40()]): CAST, offset=0, type_index=0",
jjg@1643 320 "4: #36(#37=[@#38(),@#38(),@#38()]): CAST, offset=6, type_index=0",
jjg@1643 321 "5: #36(#37=[@#38(),@#38(),@#38()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}");
jjg@1643 322 }
jjg@1643 323 }
jjg@1643 324
jjg@1643 325 @TestCase
jjg@1643 326 public static class TC14 extends RepeatingTypeAnnotations {
jjg@1643 327 public TC14() {
jjg@1643 328 setSrc(" public @A @B @B String foo(@A @A @B Object o, @A @B int i, long l) {",
jjg@1643 329 " @A @A @B String ls = (@B @A @B String) o;",
jjg@1643 330 " return (@A @B @B String) o;",
jjg@1643 331 " }");
jjg@1643 332 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 333 "0: #36(): METHOD_RETURN",
jjg@1643 334 "1: #37(#38=[@#39(),@#39()]): METHOD_RETURN",
jjg@1643 335 "2: #40(#38=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 336 "3: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 337 "4: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 338 "5: #39(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 339 "6: #37(#38=[@#39(),@#39()]): CAST, offset=0",
jjg@1643 340 "7: #36(): CAST, offset=0",
jjg@1643 341 "8: #36(): CAST, offset=6",
jjg@1643 342 "9: #37(#38=[@#39(),@#39()]): CAST, offset=6",
jjg@1643 343 "10: #40(#38=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
jjg@1643 344 "11: #39(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}");
jjg@1643 345 }
jjg@1643 346 }
jjg@1643 347
jjg@1643 348 @TestCase
jjg@1643 349 public static class TC15 extends RepeatingTypeAnnotations {
jjg@1643 350 public TC15() {
jjg@1643 351 setSrc(" public @A @A @C String foo(@C @C @A Object o, @A @B int i, long l) {",
jjg@1643 352 " @C @C @A String ls = (@A @A @C String) o;",
jjg@1643 353 " return (@C @B @B String) o;",
jjg@1643 354 " }");
jjg@1643 355 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 356 "RuntimeVisibleTypeAnnotations",
jjg@1643 357 "0: #36(): METHOD_RETURN",
jjg@1643 358 "1: #37(#38=[@#36(),@#36()]): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 359 "2: #36(): CAST, offset=0",
jjg@1643 360 "3: #36(): CAST, offset=6",
jjg@1643 361 "4: #37(#38=[@#36(),@#36()]): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
jjg@1643 362 "0: #40(#38=[@#41(),@#41()]): METHOD_RETURN",
jjg@1643 363 "1: #41(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 364 "2: #41(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 365 "3: #42(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 366 "4: #40(#38=[@#41(),@#41()]): CAST, offset=0",
jjg@1643 367 "5: #43(#38=[@#42(),@#42()]): CAST, offset=6",
jjg@1643 368 "6: #41(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}");
jjg@1643 369 }
jjg@1643 370 }
jjg@1643 371
jjg@1643 372 @TestCase
jjg@1643 373 public static class TC16 extends RepeatingTypeAnnotations {
jjg@1643 374 public TC16() {
jjg@1643 375 setSrc(" public @A @B @C String foo(@A @B @C Object o, @A @C int i, long l) {",
jjg@1643 376 " @A @B @C String ls = (@C @A @B String) o;",
jjg@1643 377 " return (@B @A @C String) o;",
jjg@1643 378 " }");
jjg@1643 379 verify("RuntimeInvisibleTypeAnnotations",
jjg@1643 380 "RuntimeVisibleTypeAnnotations",
jjg@1643 381 "0: #36(): METHOD_RETURN",
jjg@1643 382 "1: #36(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 383 "2: #36(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 384 "3: #36(): CAST, offset=0",
jjg@1643 385 "4: #36(): CAST, offset=6",
jjg@1643 386 "5: #36(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
jjg@1643 387 "0: #38(): METHOD_RETURN",
jjg@1643 388 "1: #39(): METHOD_RETURN",
jjg@1643 389 "2: #38(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 390 "3: #39(): METHOD_FORMAL_PARAMETER, param_index=0",
jjg@1643 391 "4: #38(): METHOD_FORMAL_PARAMETER, param_index=1",
jjg@1643 392 "5: #38(): CAST, offset=0",
jjg@1643 393 "6: #39(): CAST, offset=0",
jjg@1643 394 "7: #39(): CAST, offset=6",
jjg@1643 395 "8: #38(): CAST, offset=6",
jjg@1643 396 "9: #38(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}",
jjg@1643 397 "10: #39(): LOCAL_VARIABLE, {start_pc=6, length=5, index=5}");
jjg@1643 398 }
jjg@1643 399 }
jjg@1643 400 }

mercurial