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