8199940: Print more information about class loaders in IllegalAccessErrors

Reviewed-by: lfoltan, mchung
This commit is contained in:
Goetz Lindenmaier 2018-06-27 09:52:23 +02:00
parent 1e4a26ceda
commit cad47f4a03
10 changed files with 762 additions and 38 deletions

View file

@ -4612,12 +4612,17 @@ static void check_super_class_access(const InstanceKlass* this_klass, TRAPS) {
InstanceKlass::cast(super),
vca_result);
if (msg == NULL) {
bool same_module = (this_klass->module() == super->module());
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
"class %s cannot access its superclass %s",
"class %s cannot access its %ssuperclass %s (%s%s%s)",
this_klass->external_name(),
super->external_name());
super->is_abstract() ? "abstract " : "",
super->external_name(),
(same_module) ? this_klass->joint_in_module_of_loader(super) : this_klass->class_in_module_of_loader(),
(same_module) ? "" : "; ",
(same_module) ? "" : super->class_in_module_of_loader());
} else {
// Add additional message content.
Exceptions::fthrow(
@ -4646,12 +4651,16 @@ static void check_super_interface_access(const InstanceKlass* this_klass, TRAPS)
InstanceKlass::cast(k),
vca_result);
if (msg == NULL) {
bool same_module = (this_klass->module() == k->module());
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
"class %s cannot access its superinterface %s",
"class %s cannot access its superinterface %s (%s%s%s)",
this_klass->external_name(),
k->external_name());
k->external_name(),
(same_module) ? this_klass->joint_in_module_of_loader(k) : this_klass->class_in_module_of_loader(),
(same_module) ? "" : "; ",
(same_module) ? "" : k->class_in_module_of_loader());
} else {
// Add additional message content.
Exceptions::fthrow(