< prev index next >
src/hotspot/share/prims/jni.cpp
Print this page
rev 50519 : 8204943: Improve message of ArrayStoreException.
*** 2628,2638 ****
oop v = JNIHandles::resolve(value);
if (a->is_within_bounds(index)) {
if (v == NULL || v->is_a(ObjArrayKlass::cast(a->klass())->element_klass())) {
a->obj_at_put(index, v);
} else {
! THROW(vmSymbols::java_lang_ArrayStoreException());
}
} else {
char buf[jintAsStringSize];
sprintf(buf, "%d", index);
THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
--- 2628,2659 ----
oop v = JNIHandles::resolve(value);
if (a->is_within_bounds(index)) {
if (v == NULL || v->is_a(ObjArrayKlass::cast(a->klass())->element_klass())) {
a->obj_at_put(index, v);
} else {
! ResourceMark rm(THREAD);
! stringStream ss;
! int dims = 0;
! Klass *elem_kl = ObjArrayKlass::cast(a->klass())->element_klass();
! BasicType elem_tp = T_ILLEGAL;
! while (elem_kl != NULL && elem_kl->is_array_klass()) {
! dims++;
! if (elem_kl->is_objArray_klass()) {
! elem_kl = ObjArrayKlass::cast(elem_kl)->element_klass();
! } else {
! elem_tp = ArrayKlass::cast(elem_kl)->element_type();
! elem_kl = NULL;
! }
! }
! ss.print("type mismatch: can not store %s to %s[%d]",
! v->klass()->external_name(),
! elem_kl != NULL ? elem_kl->external_name() : type2name_tab[elem_tp],
! index);
! for (; dims > 0; --dims) {
! ss.print("[]");
! }
! THROW_MSG(vmSymbols::java_lang_ArrayStoreException(), ss.as_string());
}
} else {
char buf[jintAsStringSize];
sprintf(buf, "%d", index);
THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
< prev index next >