hotspot/src/share/vm/runtime/reflection.cpp
changeset 38094 46977cd73d86
parent 37480 291ee208fb72
child 38151 fffedc5e5cf8
--- a/hotspot/src/share/vm/runtime/reflection.cpp	Tue Apr 26 11:49:37 2016 +0000
+++ b/hotspot/src/share/vm/runtime/reflection.cpp	Tue Apr 26 09:08:12 2016 -0400
@@ -502,17 +502,16 @@
     }
 
     // Find the module entry for current_class, the accessor
-    ModuleEntry* module_from = InstanceKlass::cast(current_class)->module();
+    ModuleEntry* module_from = current_class->module();
     // Find the module entry for new_class, the accessee
     if (new_class->is_objArray_klass()) {
       new_class = ObjArrayKlass::cast(new_class)->bottom_klass();
     }
-    if (!new_class->is_instance_klass()) {
-      // Everyone can read a typearray.
-      assert (new_class->is_typeArray_klass(), "Unexpected klass type");
+    if (new_class->is_typeArray_klass()) {
+      // A TypeArray's defining module is java.base, access to the TypeArray is allowed
       return ACCESS_OK;
     }
-    ModuleEntry* module_to = InstanceKlass::cast(new_class)->module();
+    ModuleEntry* module_to = new_class->module();
 
     // both in same (possibly unnamed) module
     if (module_from == module_to) {
@@ -532,7 +531,7 @@
       return MODULE_NOT_READABLE;
     }
 
-    PackageEntry* package_to = InstanceKlass::cast(new_class)->package();
+    PackageEntry* package_to = new_class->package();
     assert(package_to != NULL, "can not obtain new_class' package");
 
     // Once readability is established, if module_to exports T unqualifiedly,
@@ -570,20 +569,13 @@
   char * msg = NULL;
   if (result != OTHER_PROBLEM && new_class != NULL && current_class != NULL) {
     // Find the module entry for current_class, the accessor
-    ModuleEntry* module_from = InstanceKlass::cast(current_class)->module();
+    ModuleEntry* module_from = current_class->module();
     const char * module_from_name = module_from->is_named() ? module_from->name()->as_C_string() : UNNAMED_MODULE;
     const char * current_class_name = current_class->external_name();
 
     // Find the module entry for new_class, the accessee
     ModuleEntry* module_to = NULL;
-    if (new_class->is_objArray_klass()) {
-      new_class = ObjArrayKlass::cast(new_class)->bottom_klass();
-    }
-    if (new_class->is_instance_klass()) {
-      module_to = InstanceKlass::cast(new_class)->module();
-    } else {
-      module_to = ModuleEntryTable::javabase_module();
-    }
+    module_to = new_class->module();
     const char * module_to_name = module_to->is_named() ? module_to->name()->as_C_string() : UNNAMED_MODULE;
     const char * new_class_name = new_class->external_name();
 
@@ -611,10 +603,10 @@
       }
 
     } else if (result == TYPE_NOT_EXPORTED) {
-      assert(InstanceKlass::cast(new_class)->package() != NULL,
+      assert(new_class->package() != NULL,
              "Unnamed packages are always exported");
       const char * package_name =
-        InstanceKlass::cast(new_class)->package()->name()->as_klass_external_name();
+        new_class->package()->name()->as_klass_external_name();
       assert(module_to->is_named(), "Unnamed modules export all packages");
       if (module_from->is_named()) {
         size_t len = 118 + strlen(current_class_name) + 2*strlen(module_from_name) +