< prev index next >

src/share/vm/runtime/reflection.cpp

Print this page




 388 
 389   Klass* klass = java_lang_Class::as_Klass(mirror);
 390   if (!klass->oop_is_array()) {
 391     return NULL;
 392   }
 393 
 394   oop result = java_lang_Class::component_mirror(mirror);
 395 #ifdef ASSERT
 396   oop result2 = NULL;
 397   if (ArrayKlass::cast(klass)->dimension() == 1) {
 398     if (klass->oop_is_typeArray()) {
 399       result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL);
 400     } else {
 401       result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror();
 402     }
 403   } else {
 404     Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension();
 405     assert(lower_dim->oop_is_array(), "just checking");
 406     result2 = lower_dim->java_mirror();
 407   }
 408   assert(result == result2, "results must be consistent");
 409 #endif //ASSERT
 410   return result;
 411 }
 412 
 413 
 414 bool Reflection::verify_class_access(Klass* current_class, Klass* new_class, bool classloader_only) {
 415   // Verify that current_class can access new_class.  If the classloader_only
 416   // flag is set, we automatically allow any accesses in which current_class
 417   // doesn't have a classloader.
 418   if ((current_class == NULL) ||
 419       (current_class == new_class) ||
 420       (new_class->is_public()) ||
 421       is_same_class_package(current_class, new_class)) {
 422     return true;
 423   }
 424   // Allow all accesses from sun/reflect/MagicAccessorImpl subclasses to
 425   // succeed trivially.
 426   if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
 427     return true;
 428   }




 388 
 389   Klass* klass = java_lang_Class::as_Klass(mirror);
 390   if (!klass->oop_is_array()) {
 391     return NULL;
 392   }
 393 
 394   oop result = java_lang_Class::component_mirror(mirror);
 395 #ifdef ASSERT
 396   oop result2 = NULL;
 397   if (ArrayKlass::cast(klass)->dimension() == 1) {
 398     if (klass->oop_is_typeArray()) {
 399       result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL);
 400     } else {
 401       result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror();
 402     }
 403   } else {
 404     Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension();
 405     assert(lower_dim->oop_is_array(), "just checking");
 406     result2 = lower_dim->java_mirror();
 407   }
 408   assert(oopDesc::bs()->read_barrier(result) == oopDesc::bs()->read_barrier(result2), "results must be consistent");
 409 #endif //ASSERT
 410   return result;
 411 }
 412 
 413 
 414 bool Reflection::verify_class_access(Klass* current_class, Klass* new_class, bool classloader_only) {
 415   // Verify that current_class can access new_class.  If the classloader_only
 416   // flag is set, we automatically allow any accesses in which current_class
 417   // doesn't have a classloader.
 418   if ((current_class == NULL) ||
 419       (current_class == new_class) ||
 420       (new_class->is_public()) ||
 421       is_same_class_package(current_class, new_class)) {
 422     return true;
 423   }
 424   // Allow all accesses from sun/reflect/MagicAccessorImpl subclasses to
 425   // succeed trivially.
 426   if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
 427     return true;
 428   }


< prev index next >