--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Tue Mar 15 13:48:21 2016 -0700
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Mar 17 19:04:01 2016 +0000
@@ -273,18 +273,25 @@
// Klass resolution
void LinkResolver::check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS) {
- if (!Reflection::verify_class_access(ref_klass(),
- sel_klass(),
- true)) {
+ Reflection::VerifyClassAccessResults vca_result =
+ Reflection::verify_class_access(ref_klass(), sel_klass(), true);
+ if (vca_result != Reflection::ACCESS_OK) {
ResourceMark rm(THREAD);
- Exceptions::fthrow(
- THREAD_AND_LOCATION,
- vmSymbols::java_lang_IllegalAccessError(),
- "tried to access class %s from class %s",
- sel_klass->external_name(),
- ref_klass->external_name()
- );
- return;
+ char* msg = Reflection::verify_class_access_msg(ref_klass(), sel_klass(), vca_result);
+ if (msg == NULL) {
+ Exceptions::fthrow(
+ THREAD_AND_LOCATION,
+ vmSymbols::java_lang_IllegalAccessError(),
+ "failed to access class %s from class %s",
+ sel_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(),
+ "%s", msg);
+ }
}
}