< prev index next >
src/hotspot/share/interpreter/linkResolver.cpp
Print this page
rev 50790 : 8199940: Print more information about class loaders in IllegalAccessErrors.
Reviewed-by: lfoltan, mchung
*** 216,226 ****
break;
default:
fatal("Unexpected call kind %d", call_kind());
}
}
! #endif //ASSERT
#ifndef PRODUCT
void CallInfo::print() {
ResourceMark rm;
const char* kindstr;
--- 216,226 ----
break;
default:
fatal("Unexpected call kind %d", call_kind());
}
}
! #endif // ASSERT
#ifndef PRODUCT
void CallInfo::print() {
ResourceMark rm;
const char* kindstr;
*** 292,302 ****
if (fold_type_to_class) {
if (sel_klass->is_objArray_klass()) {
base_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass();
}
// The element type could be a typeArray - we only need the access
! // check if it is an reference to another class.
if (!base_klass->is_instance_klass()) {
return; // no relevant check to do
}
}
Reflection::VerifyClassAccessResults vca_result =
--- 292,302 ----
if (fold_type_to_class) {
if (sel_klass->is_objArray_klass()) {
base_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass();
}
// The element type could be a typeArray - we only need the access
! // check if it is a reference to another class.
if (!base_klass->is_instance_klass()) {
return; // no relevant check to do
}
}
Reflection::VerifyClassAccessResults vca_result =
*** 304,320 ****
if (vca_result != Reflection::ACCESS_OK) {
ResourceMark rm(THREAD);
char* msg = Reflection::verify_class_access_msg(ref_klass,
InstanceKlass::cast(base_klass),
vca_result);
if (msg == NULL) {
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "failed to access class %s from class %s",
base_klass->external_name(),
! ref_klass->external_name());
} else {
// Use module specific message returned by verify_class_access_msg().
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
--- 304,324 ----
if (vca_result != Reflection::ACCESS_OK) {
ResourceMark rm(THREAD);
char* msg = Reflection::verify_class_access_msg(ref_klass,
InstanceKlass::cast(base_klass),
vca_result);
+ bool same_module = (base_klass->module() == ref_klass->module());
if (msg == NULL) {
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "failed to access class %s from class %s (%s%s%s)",
base_klass->external_name(),
! ref_klass->external_name(),
! (same_module) ? base_klass->joint_in_module_of_loader(ref_klass) : base_klass->class_in_module_of_loader(),
! (same_module) ? "" : "; ",
! (same_module) ? "" : ref_klass->class_in_module_of_loader());
} else {
// Use module specific message returned by verify_class_access_msg().
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
*** 594,605 ****
ResourceMark rm(THREAD);
bool same_module = (sel_klass->module() == ref_klass->module());
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "class %s tried to access method %s.%s%s (%s%s%s)",
ref_klass->external_name(),
sel_klass->external_name(),
sel_method->name()->as_C_string(),
sel_method->signature()->as_C_string(),
(same_module) ? ref_klass->joint_in_module_of_loader(sel_klass) : ref_klass->class_in_module_of_loader(),
(same_module) ? "" : "; ",
--- 598,612 ----
ResourceMark rm(THREAD);
bool same_module = (sel_klass->module() == ref_klass->module());
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "class %s tried to access %s%s%smethod %s.%s%s (%s%s%s)",
ref_klass->external_name(),
+ sel_method->is_abstract() ? "abstract " : "",
+ sel_method->is_protected() ? "protected " : "",
+ sel_method->is_private() ? "private " : "",
sel_klass->external_name(),
sel_method->name()->as_C_string(),
sel_method->signature()->as_C_string(),
(same_module) ? ref_klass->joint_in_module_of_loader(sel_klass) : ref_klass->class_in_module_of_loader(),
(same_module) ? "" : "; ",
*** 925,942 ****
fd.access_flags(),
true, false, CHECK);
// Any existing exceptions that may have been thrown, for example LinkageErrors
// from nest-host resolution, have been allowed to propagate.
if (!can_access) {
ResourceMark rm(THREAD);
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "tried to access field %s.%s from class %s",
sel_klass->external_name(),
fd.name()->as_C_string(),
! ref_klass->external_name()
);
return;
}
}
--- 932,955 ----
fd.access_flags(),
true, false, CHECK);
// Any existing exceptions that may have been thrown, for example LinkageErrors
// from nest-host resolution, have been allowed to propagate.
if (!can_access) {
+ bool same_module = (sel_klass->module() == ref_klass->module());
ResourceMark rm(THREAD);
Exceptions::fthrow(
THREAD_AND_LOCATION,
vmSymbols::java_lang_IllegalAccessError(),
! "class %s tried to access %s%sfield %s.%s (%s%s%s)",
! ref_klass->external_name(),
! fd.is_protected() ? "protected " : "",
! fd.is_private() ? "private " : "",
sel_klass->external_name(),
fd.name()->as_C_string(),
! (same_module) ? ref_klass->joint_in_module_of_loader(sel_klass) : ref_klass->class_in_module_of_loader(),
! (same_module) ? "" : "; ",
! (same_module) ? "" : sel_klass->class_in_module_of_loader()
);
return;
}
}
< prev index next >