1 /* 2 * Copyright (c) 2013, 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 import static com.sun.tools.classfile.TypeAnnotation.TargetType.*; 25 26 /* 27 * @test 28 * @bug 8006732 8006775 8042451 29 * @summary Test population of reference info for multicatch exception parameters 30 * @author Werner Dietl 31 * @modules jdk.jdeps/com.sun.tools.classfile 32 * @compile -g Driver.java ReferenceInfoUtil.java MultiCatch.java 33 * @run main Driver MultiCatch 34 */ 35 public class MultiCatch { 36 37 @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0) 38 @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 39 public String multiCatch1() { 40 return "void multiCatch1() { " + 41 "try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException e) { e.toString(); } }"; 42 } 43 44 @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0) 45 @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 46 @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 47 public String multiCatch2() { 48 return "void multiCatch2() { " + 49 "try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException | @TC IllegalArgumentException e) { e.toString(); } }"; 50 } 51 52 @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 53 @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 54 @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 55 @TADescription(annotation = "TD", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 56 @TADescription(annotation = "TE", type = EXCEPTION_PARAMETER, exceptionIndex = 3) 57 public String multiCatch3() { 58 return "void multiCatch3() { " + 59 "try { new Object(); } catch (NullPointerException e1) {}" + 60 "try { new Object(); } catch (@TA @TB NullPointerException | @TC @TD IndexOutOfBoundsException | @TE IllegalArgumentException e2) { e2.toString(); } }"; 61 } 62 63 @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0) 64 @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 65 public String multiCatchRepeatableAnnotation1() { 66 return "void multiCatch1() { " + 67 "try { new Object(); } catch (@RTA @RTA NullPointerException |" + 68 " @RTB @RTB IndexOutOfBoundsException e) { e.toString(); } }"; 69 } 70 71 @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0) 72 @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 73 @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 74 public String multiCatchRepeatableAnnotation2() { 75 return "void multiCatch2() { " + 76 "try { new Object(); } catch (@RTA @RTA NullPointerException |" + 77 " @RTB @RTB IndexOutOfBoundsException | @RTC @RTC IllegalArgumentException e) { e.toString(); } }"; 78 } 79 80 @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 81 @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1) 82 @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 83 @TADescription(annotation = "RTDs", type = EXCEPTION_PARAMETER, exceptionIndex = 2) 84 @TADescription(annotation = "RTEs", type = EXCEPTION_PARAMETER, exceptionIndex = 3) 85 public String multiCatchRepeatableAnnotation3() { 86 return "void multiCatch3() { " + 87 "try { new Object(); } catch (NullPointerException e1) {}" + 88 "try { new Object(); } catch (@RTA @RTA @RTB @RTB NullPointerException |" + 89 " @RTC @RTC @RTD @RTD IndexOutOfBoundsException |" + 90 " @RTE @RTE IllegalArgumentException e2) { e2.toString(); } }"; 91 } 92 }