< prev index next >

src/hotspot/share/runtime/reflection.cpp

Print this page

        

@@ -342,11 +342,15 @@
   } else {
     Klass* k = java_lang_Class::as_Klass(element_mirror);
     if (k->is_array_klass() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
       THROW_0(vmSymbols::java_lang_IllegalArgumentException());
     }
-    return oopFactory::new_array(k, length, THREAD);
+    if (java_lang_Class::is_box_type(element_mirror)) {
+      return oopFactory::new_objArray(k, length, THREAD);
+    } else {
+      return oopFactory::new_valueArray(k, length, THREAD);
+    }
   }
 }
 
 
 arrayOop Reflection::reflect_new_multi_array(oop element_mirror, typeArrayOop dim_array, TRAPS) {

@@ -383,11 +387,12 @@
         THROW_0(vmSymbols::java_lang_IllegalArgumentException());
       }
       dim += k_dim;
     }
   }
-  klass = klass->array_klass(dim, CHECK_NULL);
+  ArrayStorageProperties storage_props = FieldType::get_array_storage_properties(klass->name());
+  klass = klass->array_klass(storage_props, dim, CHECK_NULL);
   oop obj = ArrayKlass::cast(klass)->multi_allocate(len, dimensions, CHECK_NULL);
   assert(obj->is_array(), "just checking");
   return arrayOop(obj);
 }
 
< prev index next >