src/share/classes/sun/reflect/misc/ReflectUtil.java
Print this page
@@ -142,6 +142,36 @@
} catch (SecurityException e) {
return false;
}
return true;
}
+
+ /**
+ * Returns true if package access check is needed for reflective
+ * access from a class loader 'from' to classes or members in
+ * a class defined by class loader 'to'. This method returns true
+ * if 'from' is not the same as or an ancestor of 'to'. All code
+ * in a system domain are granted with all permission and so this
+ * method returns false if 'from' class loader is a class loader
+ * loading system classes. On the other hand, if a class loader
+ * attempts to access system domain classes, it requires package
+ * access check and this method will return true.
+ */
+ public static boolean needsPackageAccessCheck(ClassLoader from, ClassLoader to) {
+ if (from == null || from == to)
+ return false;
+
+ if (to == null)
+ return true;
+
+ // If from class loader is in the to's class loader's delegation chain.
+ // no need for package access check.
+ ClassLoader acl = to;
+ do {
+ acl = acl.getParent();
+ if (from == acl) {
+ return false;
+ }
+ } while (acl != null);
+ return true;
+ }
}