< prev index next >

src/hotspot/share/runtime/sharedRuntime.cpp

Print this page

        

*** 1957,1985 **** // The caller of generate_class_cast_message() (or one of its callers) // must use a ResourceMark in order to correctly free the result. char* SharedRuntime::generate_class_cast_message( Klass* caster_klass, Klass* target_klass, Symbol* target_klass_name) { ! ! const char* caster_name = caster_klass->class_loader_and_module_name(); assert(target_klass != NULL || target_klass_name != NULL, "one must be provided"); const char* target_name = target_klass == NULL ? target_klass_name->as_C_string() : ! target_klass->class_loader_and_module_name(); ! size_t msglen = strlen(caster_name) + strlen(" cannot be cast to ") + strlen(target_name) + 1; char* message = NEW_RESOURCE_ARRAY_RETURN_NULL(char, msglen); if (message == NULL) { // Shouldn't happen, but don't cause even more problems if it does message = const_cast<char*>(caster_klass->external_name()); } else { jio_snprintf(message, msglen, ! "%s cannot be cast to %s", caster_name, ! target_name); } return message; } JRT_LEAF(void, SharedRuntime::reguard_yellow_pages()) --- 1957,2002 ---- // The caller of generate_class_cast_message() (or one of its callers) // must use a ResourceMark in order to correctly free the result. char* SharedRuntime::generate_class_cast_message( Klass* caster_klass, Klass* target_klass, Symbol* target_klass_name) { ! const char* caster_name = caster_klass->external_name(); assert(target_klass != NULL || target_klass_name != NULL, "one must be provided"); const char* target_name = target_klass == NULL ? target_klass_name->as_C_string() : ! target_klass->external_name(); ! ! size_t msglen = strlen(caster_name) + strlen("class ") + strlen(" cannot be cast to class ") + strlen(target_name) + 1; ! ! const char* caster_klass_description = ""; ! const char* target_klass_description = ""; ! const char* klass_separator = ""; ! if (target_klass != NULL && caster_klass->module() == target_klass->module()) { ! caster_klass_description = caster_klass->joint_in_module_of_loader(target_klass); ! } else { ! caster_klass_description = caster_klass->class_in_module_of_loader(); ! target_klass_description = (target_klass != NULL) ? target_klass->class_in_module_of_loader() : ""; ! klass_separator = (target_klass != NULL) ? "; " : ""; ! } ! // add 3 for parenthesis and preceeding space ! msglen += strlen(caster_klass_description) + strlen(target_klass_description) + strlen(klass_separator) + 3; char* message = NEW_RESOURCE_ARRAY_RETURN_NULL(char, msglen); if (message == NULL) { // Shouldn't happen, but don't cause even more problems if it does message = const_cast<char*>(caster_klass->external_name()); } else { jio_snprintf(message, msglen, ! "class %s cannot be cast to class %s (%s%s%s)", caster_name, ! target_name, ! caster_klass_description, ! klass_separator, ! target_klass_description ! ); } return message; } JRT_LEAF(void, SharedRuntime::reguard_yellow_pages())
< prev index next >