< prev index next >
src/share/vm/runtime/reflection.cpp
Print this page
*** 462,473 ****
------------------------------------------------------------------------------------------------
Caller S in package If MS is loose: YES If same classloader/package (PS == PT): YES
PS, runtime module MS If MS can read T's If same runtime module: (MS == MT): YES
unnamed module: YES
! Else if (MS can read MT (Establish readability) &&
! MT exports PT to MS or to all modules): YES
------------------------------------------------------------------------------------------------
Caller S in unnamed YES Readability exists because unnamed module
module UM "reads" all modules
if (MT exports PT to UM or to all modules): YES
--- 462,474 ----
------------------------------------------------------------------------------------------------
Caller S in package If MS is loose: YES If same classloader/package (PS == PT): YES
PS, runtime module MS If MS can read T's If same runtime module: (MS == MT): YES
unnamed module: YES
! Else if (MS can read MT (establish readability) &&
! ((MT exports PT to MS or to all modules) ||
! (MT is open))): YES
------------------------------------------------------------------------------------------------
Caller S in unnamed YES Readability exists because unnamed module
module UM "reads" all modules
if (MT exports PT to UM or to all modules): YES
*** 516,526 ****
// both in same (possibly unnamed) module
if (module_from == module_to) {
return ACCESS_OK;
}
! // Acceptable access to a type in an unamed module. Note that since
// unnamed modules can read all unnamed modules, this also handles the
// case where module_from is also unnamed but in a different class loader.
if (!module_to->is_named() &&
(module_from->can_read_all_unnamed() || module_from->can_read(module_to))) {
return ACCESS_OK;
--- 517,527 ----
// both in same (possibly unnamed) module
if (module_from == module_to) {
return ACCESS_OK;
}
! // Acceptable access to a type in an unnamed module. Note that since
// unnamed modules can read all unnamed modules, this also handles the
// case where module_from is also unnamed but in a different class loader.
if (!module_to->is_named() &&
(module_from->can_read_all_unnamed() || module_from->can_read(module_to))) {
return ACCESS_OK;
*** 529,538 ****
--- 530,544 ----
// Establish readability, check if module_from is allowed to read module_to.
if (!module_from->can_read(module_to)) {
return MODULE_NOT_READABLE;
}
+ // Access is allowed if module_to is open, i.e. all its packages are unqualifiedly exported
+ if (module_to->is_open()) {
+ return ACCESS_OK;
+ }
+
PackageEntry* package_to = new_class->package();
assert(package_to != NULL, "can not obtain new_class' package");
{
MutexLocker m1(Module_lock);
< prev index next >