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