< prev index next >

src/java.base/share/classes/jdk/internal/reflect/Reflection.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2001, 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. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2001, 2019, 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. Oracle designates this
*** 120,129 **** --- 120,132 ---- public static boolean verifyMemberAccess(Class<?> currentClass, Class<?> memberClass, Class<?> targetClass, int modifiers) { + Objects.requireNonNull(currentClass); + Objects.requireNonNull(memberClass); + if (currentClass == memberClass) { // Always succeeds return true; }
*** 325,334 **** --- 328,340 ---- Class<?> memberClass, Class<?> targetClass, int modifiers) throws IllegalAccessException { + if (currentClass == null) + return newIllegalAccessException(memberClass, modifiers); + String currentSuffix = ""; String memberSuffix = ""; Module m1 = currentClass.getModule(); if (m1.isNamed()) currentSuffix = " (in " + m1 + ")";
*** 354,363 **** --- 360,400 ---- return new IllegalAccessException(msg); } /** + * Returns an IllegalAccessException with an exception message where + * there is no caller frame. + */ + public static IllegalAccessException newIllegalAccessException(Class<?> memberClass, + int modifiers) + throws IllegalAccessException + { + String memberSuffix = ""; + Module m2 = memberClass.getModule(); + if (m2.isNamed()) + memberSuffix = " (in " + m2 + ")"; + + String memberPackageName = memberClass.getPackageName(); + + String msg = "JNI attached native thread (null caller frame) cannot access "; + if (m2.isExported(memberPackageName)) { + + // module access okay so include the modifiers in the message + msg += "a member of " + memberClass + memberSuffix + + " with modifiers \"" + Modifier.toString(modifiers) + "\""; + + } else { + // module access failed + msg += memberClass + memberSuffix+ " because " + + m2 + " does not export " + memberPackageName; + } + + return new IllegalAccessException(msg); + } + + /** * Returns true if {@code currentClass} and {@code memberClass} * are nestmates - that is, if they have the same nesthost as * determined by the VM. */ public static native boolean areNestMates(Class<?> currentClass,
< prev index next >