hotspot/src/share/vm/runtime/reflection.cpp
changeset 33611 9abd65805e19
parent 33602 16053580a684
child 34229 892795cc82fe
equal deleted inserted replaced
33602:16053580a684 33611:9abd65805e19
   328   if (java_lang_Class::is_primitive(element_mirror)) {
   328   if (java_lang_Class::is_primitive(element_mirror)) {
   329     Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL);
   329     Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL);
   330     return TypeArrayKlass::cast(tak)->allocate(length, THREAD);
   330     return TypeArrayKlass::cast(tak)->allocate(length, THREAD);
   331   } else {
   331   } else {
   332     Klass* k = java_lang_Class::as_Klass(element_mirror);
   332     Klass* k = java_lang_Class::as_Klass(element_mirror);
   333     if (k->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
   333     if (k->is_array_klass() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
   334       THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   334       THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   335     }
   335     }
   336     return oopFactory::new_objArray(k, length, THREAD);
   336     return oopFactory::new_objArray(k, length, THREAD);
   337   }
   337   }
   338 }
   338 }
   364   int dim = len;
   364   int dim = len;
   365   if (java_lang_Class::is_primitive(element_mirror)) {
   365   if (java_lang_Class::is_primitive(element_mirror)) {
   366     klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL);
   366     klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL);
   367   } else {
   367   } else {
   368     klass = java_lang_Class::as_Klass(element_mirror);
   368     klass = java_lang_Class::as_Klass(element_mirror);
   369     if (klass->oop_is_array()) {
   369     if (klass->is_array_klass()) {
   370       int k_dim = ArrayKlass::cast(klass)->dimension();
   370       int k_dim = ArrayKlass::cast(klass)->dimension();
   371       if (k_dim + len > MAX_DIM) {
   371       if (k_dim + len > MAX_DIM) {
   372         THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   372         THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   373       }
   373       }
   374       dim += k_dim;
   374       dim += k_dim;
   385   if (java_lang_Class::is_primitive(mirror)) {
   385   if (java_lang_Class::is_primitive(mirror)) {
   386     return NULL;
   386     return NULL;
   387   }
   387   }
   388 
   388 
   389   Klass* klass = java_lang_Class::as_Klass(mirror);
   389   Klass* klass = java_lang_Class::as_Klass(mirror);
   390   if (!klass->oop_is_array()) {
   390   if (!klass->is_array_klass()) {
   391     return NULL;
   391     return NULL;
   392   }
   392   }
   393 
   393 
   394   oop result = java_lang_Class::component_mirror(mirror);
   394   oop result = java_lang_Class::component_mirror(mirror);
   395 #ifdef ASSERT
   395 #ifdef ASSERT
   396   oop result2 = NULL;
   396   oop result2 = NULL;
   397   if (ArrayKlass::cast(klass)->dimension() == 1) {
   397   if (ArrayKlass::cast(klass)->dimension() == 1) {
   398     if (klass->oop_is_typeArray()) {
   398     if (klass->is_typeArray_klass()) {
   399       result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL);
   399       result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL);
   400     } else {
   400     } else {
   401       result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror();
   401       result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror();
   402     }
   402     }
   403   } else {
   403   } else {
   404     Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension();
   404     Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension();
   405     assert(lower_dim->oop_is_array(), "just checking");
   405     assert(lower_dim->is_array_klass(), "just checking");
   406     result2 = lower_dim->java_mirror();
   406     result2 = lower_dim->java_mirror();
   407   }
   407   }
   408   assert(result == result2, "results must be consistent");
   408   assert(result == result2, "results must be consistent");
   409 #endif //ASSERT
   409 #endif //ASSERT
   410   return result;
   410   return result;
   493       access.is_public()) {
   493       access.is_public()) {
   494     return true;
   494     return true;
   495   }
   495   }
   496 
   496 
   497   Klass* host_class = current_class;
   497   Klass* host_class = current_class;
   498   while (host_class->oop_is_instance() &&
   498   while (host_class->is_instance_klass() &&
   499          InstanceKlass::cast(host_class)->is_anonymous()) {
   499          InstanceKlass::cast(host_class)->is_anonymous()) {
   500     Klass* next_host_class = InstanceKlass::cast(host_class)->host_klass();
   500     Klass* next_host_class = InstanceKlass::cast(host_class)->host_klass();
   501     if (next_host_class == NULL)  break;
   501     if (next_host_class == NULL)  break;
   502     host_class = next_host_class;
   502     host_class = next_host_class;
   503   }
   503   }