< prev index next >
src/java.base/share/classes/jdk/internal/reflect/Reflection.java
Print this page
*** 102,144 ****
Class<?> memberClass,
Class<?> targetClass,
int modifiers)
throws IllegalAccessException
{
- if (currentClass == null || memberClass == null) {
- throw new InternalError();
- }
-
if (!verifyMemberAccess(currentClass, memberClass, targetClass, modifiers)) {
throwIllegalAccessException(currentClass, memberClass, targetClass, modifiers);
}
}
/**
! * Verify access to a member, returning {@code false} if no access
*/
public static boolean verifyMemberAccess(Class<?> currentClass,
Class<?> memberClass,
Class<?> targetClass,
int modifiers)
{
! // Verify that currentClass can access a field, method, or
! // constructor of memberClass, where that member's access bits are
! // "modifiers".
!
! boolean gotIsSameClassPackage = false;
! boolean isSameClassPackage = false;
if (currentClass == memberClass) {
// Always succeeds
return true;
}
! if (!verifyModuleAccess(currentClass, memberClass)) {
return false;
}
if (!Modifier.isPublic(getClassAccessFlags(memberClass))) {
isSameClassPackage = isSameClassPackage(currentClass, memberClass);
gotIsSameClassPackage = true;
if (!isSameClassPackage) {
return false;
--- 102,148 ----
Class<?> memberClass,
Class<?> targetClass,
int modifiers)
throws IllegalAccessException
{
if (!verifyMemberAccess(currentClass, memberClass, targetClass, modifiers)) {
throwIllegalAccessException(currentClass, memberClass, targetClass, modifiers);
}
}
/**
! * Verify access to a member and return {@code true} if it is granted.
! *
! * @param currentClass the class performing the access
! * @param memberClass the declaring class of the member being accessed
! * @param targetClass the class of target object if accessing instance
! * field or method;
! * or the declaring class if accessing constructor;
! * or null if accessing static field or method
! * @param modifiers the member's access modifiers
! * @return {@code true} if access to member is granted
*/
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;
}
! if (!verifyModuleAccess(currentClass.getModule(), memberClass)) {
return false;
}
+ boolean gotIsSameClassPackage = false;
+ boolean isSameClassPackage = false;
+
if (!Modifier.isPublic(getClassAccessFlags(memberClass))) {
isSameClassPackage = isSameClassPackage(currentClass, memberClass);
gotIsSameClassPackage = true;
if (!isSameClassPackage) {
return false;
*** 195,212 ****
return true;
}
/**
* Returns {@code true} if memberClass's's module exports memberClass's
! * package to currentClass's module.
*/
- public static boolean verifyModuleAccess(Class<?> currentClass,
- Class<?> memberClass) {
- return verifyModuleAccess(currentClass.getModule(), memberClass);
- }
-
public static boolean verifyModuleAccess(Module currentModule, Class<?> memberClass) {
Module memberModule = memberClass.getModule();
// module may be null during startup (initLevel 0)
if (currentModule == memberModule)
return true; // same module (named or unnamed)
--- 199,214 ----
return true;
}
/**
* Returns {@code true} if memberClass's's module exports memberClass's
! * package to currentModule.
*/
public static boolean verifyModuleAccess(Module currentModule, Class<?> memberClass) {
+ Objects.requireNonNull(currentModule);
+ Objects.requireNonNull(memberClass);
+
Module memberModule = memberClass.getModule();
// module may be null during startup (initLevel 0)
if (currentModule == memberModule)
return true; // same module (named or unnamed)
*** 376,390 ****
return printStackWhenAccessSucceeds;
}
/**
* Throws IllegalAccessException with the an exception message based on
! * the access that is denied.
*/
! private static void throwIllegalAccessException(Class<?> currentClass,
Class<?> memberClass,
! Object target,
int modifiers)
throws IllegalAccessException
{
String currentSuffix = "";
String memberSuffix = "";
--- 378,394 ----
return printStackWhenAccessSucceeds;
}
/**
* Throws IllegalAccessException with the an exception message based on
! * the access that is denied. This method throws meaningful exception only
! * when {@link #verifyMemberAccess(Class, Class, Class, int)} returns false
! * for the same parameters.
*/
! public static void throwIllegalAccessException(Class<?> currentClass,
Class<?> memberClass,
! Class<?> targetClass,
int modifiers)
throws IllegalAccessException
{
String currentSuffix = "";
String memberSuffix = "";
< prev index next >