< 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 >