< prev index next >

src/hotspot/share/prims/jni.cpp

Print this page
rev 50570 : 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,2648 ---- 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; ! Klass *bottom_kl = ObjArrayKlass::cast(a->klass())->bottom_klass(); ! ss.print("type mismatch: can not store %s to %s[%d]", ! v->klass()->external_name(), ! bottom_kl->is_typeArray_klass() ? type2name_tab[ArrayKlass::cast(bottom_kl)->element_type()] : bottom_kl->external_name(), ! index); ! for (int dims = ArrayKlass::cast(a->klass())->dimension(); dims > 1; --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 >