< prev index next >

test/hotspot/jtreg/compiler/jsr292/methodHandleExceptions/TestAMEnotNPE.java

Print this page
rev 50604 : imported patch jep181-rev1

*** 1,7 **** /* ! * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 21,41 **** * questions. */ /** * @test ! * @bug 8025260 8016839 ! * @summary Ensure that AbstractMethodError and IllegalAccessError are thrown appropriately, not NullPointerException * @modules java.base/jdk.internal.org.objectweb.asm * @library / . * * @build p.* * @run main/othervm compiler.jsr292.methodHandleExceptions.TestAMEnotNPE * @run main/othervm -Xint compiler.jsr292.methodHandleExceptions.TestAMEnotNPE * @run main/othervm -Xcomp compiler.jsr292.methodHandleExceptions.TestAMEnotNPE */ package compiler.jsr292.methodHandleExceptions; import p.Dok; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.Handle; --- 21,48 ---- * questions. */ /** * @test ! * @bug 8025260 8016839 8046171 ! * @summary Ensure that correct exceptions are thrown, not NullPointerException * @modules java.base/jdk.internal.org.objectweb.asm * @library / . * * @build p.* * @run main/othervm compiler.jsr292.methodHandleExceptions.TestAMEnotNPE * @run main/othervm -Xint compiler.jsr292.methodHandleExceptions.TestAMEnotNPE * @run main/othervm -Xcomp compiler.jsr292.methodHandleExceptions.TestAMEnotNPE */ + // Since this test was written the specification for interface method selection has been + // revised (JEP 181 - Nestmates) so that private methods are never selected, as they never + // override any inherited method. So where a private method was previously selected + // and then resulted in IllegalAccessError, the private method is skipped and the invocation + // will either succeed or fail based on what other implementations are found in the inheritance + // hierarchy. This is explained for each test below. + package compiler.jsr292.methodHandleExceptions; import p.Dok; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.Handle;
*** 89,135 **** if (!(writeJarFiles || readJarFiles)) { throw new Error("Command line parameter (if any) should be prefix of writeJarFiles or readJarFiles"); } } - try { System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m, p.D extends p.F, p.F.m FINAL"); tryAndCheckThrown(lt, bytesForDprivateSubWhat("p/F"), "p.D extends p.F (p.F implements p.I, FINAL public m), private m", ! IllegalAccessError.class, "pD_ext_pF"); ! // We'll take either a VerifyError (pre 2013-11-30) ! // or an IllegalAccessError (post 2013-11-22) ! } catch (VerifyError ve) { ! System.out.println("Saw expected VerifyError " + ve); ! } System.out.println(); System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m, p.D extends p.E"); tryAndCheckThrown(lt, bytesForDprivateSubWhat("p/E"), "p.D extends p.E (p.E implements p.I, public m), private m", ! IllegalAccessError.class, "pD_ext_pE"); System.out.println("TRYING p.D.m ABSTRACT interface-invoked as p.I.m"); tryAndCheckThrown(lt, bytesForD(), "D extends abstract C, no m", AbstractMethodError.class, "pD_ext_pC"); System.out.println("TRYING q.D.m PACKAGE interface-invoked as p.I.m"); tryAndCheckThrown(lt, "q.D", bytesForDsomeAccess("q/D", 0), ! "q.D implements p.I, protected m", IllegalAccessError.class, ! "qD_m_pp_imp_pI"); // Note jar file name is used in the plural-arg case. System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m"); tryAndCheckThrown(lt, bytesForDsomeAccess("p/D", ACC_PRIVATE), "p.D implements p.I, private m", ! IllegalAccessError.class, "pD_m_pri_imp_pI"); // Plural-arg test. System.out.println("TRYING p.D.m PRIVATE MANY ARG interface-invoked as p.I.m"); tryAndCheckThrownMany(lt, bytesForDsomeAccess("p/D", ACC_PRIVATE), ! "p.D implements p.I, private m", IllegalAccessError.class); if (lt.size() > 0) { System.out.flush(); Thread.sleep(250); // This de-interleaves output and error in Netbeans, sigh. for (Throwable th : lt) --- 96,140 ---- if (!(writeJarFiles || readJarFiles)) { throw new Error("Command line parameter (if any) should be prefix of writeJarFiles or readJarFiles"); } } System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m, p.D extends p.F, p.F.m FINAL"); + System.out.println(" - should invoke p.F.m as private p.D.m is skipped for selection"); tryAndCheckThrown(lt, bytesForDprivateSubWhat("p/F"), "p.D extends p.F (p.F implements p.I, FINAL public m), private m", ! null /* should succeed */, "pD_ext_pF"); System.out.println(); System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m, p.D extends p.E"); + System.out.println(" - should invoke p.E.m as private p.D.m is skipped for selection"); tryAndCheckThrown(lt, bytesForDprivateSubWhat("p/E"), "p.D extends p.E (p.E implements p.I, public m), private m", ! null /* should succeed */, "pD_ext_pE"); System.out.println("TRYING p.D.m ABSTRACT interface-invoked as p.I.m"); tryAndCheckThrown(lt, bytesForD(), "D extends abstract C, no m", AbstractMethodError.class, "pD_ext_pC"); System.out.println("TRYING q.D.m PACKAGE interface-invoked as p.I.m"); tryAndCheckThrown(lt, "q.D", bytesForDsomeAccess("q/D", 0), ! "q.D implements p.I, protected m", ! IllegalAccessError.class, "qD_m_pp_imp_pI"); // Note jar file name is used in the plural-arg case. System.out.println("TRYING p.D.m PRIVATE interface-invoked as p.I.m"); + System.out.println(" - should invoke p.I.m as private p.D.m is skipped for selection"); tryAndCheckThrown(lt, bytesForDsomeAccess("p/D", ACC_PRIVATE), "p.D implements p.I, private m", ! null /* should succeed */, "pD_m_pri_imp_pI"); // Plural-arg test. System.out.println("TRYING p.D.m PRIVATE MANY ARG interface-invoked as p.I.m"); + System.out.println(" - should invoke p.I.m as private p.D.m is skipped for selection"); tryAndCheckThrownMany(lt, bytesForDsomeAccess("p/D", ACC_PRIVATE), ! "p.D implements p.I, private m", null /* should succeed */); if (lt.size() > 0) { System.out.flush(); Thread.sleep(250); // This de-interleaves output and error in Netbeans, sigh. for (Throwable th : lt)
< prev index next >