< prev index next >

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

Print this page

        

*** 82,112 **** valid. */ @HotSpotIntrinsicCandidate public static native int getClassAccessFlags(Class<?> c); public static void ensureMemberAccess(Class<?> currentClass, Class<?> memberClass, ! Object target, int modifiers) throws IllegalAccessException { if (currentClass == null || memberClass == null) { throw new InternalError(); } ! if (!verifyMemberAccess(currentClass, memberClass, target, modifiers)) { ! throwIllegalAccessException(currentClass, memberClass, target, modifiers); } } ! public static boolean verifyMemberAccess(Class<?> currentClass, ! // Declaring class of field ! // or method Class<?> memberClass, ! // May be NULL in case of statics ! Object target, int modifiers) { // Verify that currentClass can access a field, method, or // constructor of memberClass, where that member's access bits are // "modifiers". --- 82,122 ---- valid. */ @HotSpotIntrinsicCandidate public static native int getClassAccessFlags(Class<?> c); + /** + * Ensures that access to a member is granted and throws + * IllegalAccessException if not. + * + * @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 + * @throws IllegalAccessException if access to member is denied + */ public static void ensureMemberAccess(Class<?> currentClass, 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); } } ! private 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".
*** 160,184 **** if (!successSoFar) { return false; } ! if (Modifier.isProtected(modifiers)) { ! // Additional test for protected members: JLS 6.6.2 ! Class<?> targetClass = (target == null ? memberClass : target.getClass()); ! if (targetClass != currentClass) { if (!gotIsSameClassPackage) { isSameClassPackage = isSameClassPackage(currentClass, memberClass); gotIsSameClassPackage = true; } if (!isSameClassPackage) { if (!isSubclassOf(targetClass, currentClass)) { return false; } } } - } return true; } /** --- 170,194 ---- if (!successSoFar) { return false; } ! // Additional test for protected instance members ! // and protected constructors: JLS 6.6.2 ! if (targetClass != null && Modifier.isProtected(modifiers) && ! targetClass != currentClass) ! { if (!gotIsSameClassPackage) { isSameClassPackage = isSameClassPackage(currentClass, memberClass); gotIsSameClassPackage = true; } if (!isSameClassPackage) { if (!isSubclassOf(targetClass, currentClass)) { return false; } } } return true; } /**
< prev index next >