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