504 Symbol* failed_type_symbol = |
504 Symbol* failed_type_symbol = |
505 SystemDictionary::check_signature_loaders(signature, target_loader, |
505 SystemDictionary::check_signature_loaders(signature, target_loader, |
506 super_loader, true, |
506 super_loader, true, |
507 CHECK_(false)); |
507 CHECK_(false)); |
508 if (failed_type_symbol != NULL) { |
508 if (failed_type_symbol != NULL) { |
509 const char* msg = "loader constraint violation for class %s: when selecting " |
509 stringStream ss; |
510 "overriding method %s the class loader %s of the " |
510 ss.print("loader constraint violation for class %s: when selecting " |
511 "selected method's type %s, and the class loader %s for its super " |
511 "overriding method %s the class loader %s of the " |
512 "type %s have different Class objects for the type %s used in the signature"; |
512 "selected method's type %s, and the class loader %s for its super " |
513 const char* curr_class = klass->external_name(); |
513 "type %s have different Class objects for the type %s used in the signature (%s; %s)", |
514 const char* method = target_method()->name_and_sig_as_C_string(); |
514 klass->external_name(), |
515 const char* loader1 = java_lang_ClassLoader::describe_external(target_loader()); |
515 target_method()->name_and_sig_as_C_string(), |
516 const char* sel_class = target_klass->external_name(); |
516 target_klass->class_loader_data()->loader_name_and_id(), |
517 const char* loader2 = java_lang_ClassLoader::describe_external(super_loader()); |
517 target_klass->external_name(), |
518 const char* super_class = super_klass->external_name(); |
518 super_klass->class_loader_data()->loader_name_and_id(), |
519 const char* failed_type_name = failed_type_symbol->as_klass_external_name(); |
519 super_klass->external_name(), |
520 size_t buflen = strlen(msg) + strlen(curr_class) + strlen(method) + |
520 failed_type_symbol->as_klass_external_name(), |
521 strlen(loader1) + strlen(sel_class) + strlen(loader2) + |
521 target_klass->class_in_module_of_loader(false, true), |
522 strlen(super_class) + strlen(failed_type_name); |
522 super_klass->class_in_module_of_loader(false, true)); |
523 char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); |
523 THROW_MSG_(vmSymbols::java_lang_LinkageError(), ss.as_string(), false); |
524 jio_snprintf(buf, buflen, msg, curr_class, method, loader1, sel_class, loader2, |
|
525 super_class, failed_type_name); |
|
526 THROW_MSG_(vmSymbols::java_lang_LinkageError(), buf, false); |
|
527 } |
524 } |
528 } |
525 } |
529 } |
526 } |
530 |
527 |
531 put_method_at(target_method(), i); |
528 put_method_at(target_method(), i); |
1240 SystemDictionary::check_signature_loaders(m->signature(), |
1237 SystemDictionary::check_signature_loaders(m->signature(), |
1241 method_holder_loader, |
1238 method_holder_loader, |
1242 interface_loader, |
1239 interface_loader, |
1243 true, CHECK); |
1240 true, CHECK); |
1244 if (failed_type_symbol != NULL) { |
1241 if (failed_type_symbol != NULL) { |
1245 const char* msg = "loader constraint violation in interface itable" |
1242 stringStream ss; |
1246 " initialization for class %s: when selecting method %s the" |
1243 ss.print("loader constraint violation in interface itable" |
1247 " class loader %s for super interface %s, and the class" |
1244 " initialization for class %s: when selecting method %s the" |
1248 " loader %s of the selected method's type, %s have" |
1245 " class loader %s for super interface %s, and the class" |
1249 " different Class objects for the type %s used in the signature"; |
1246 " loader %s of the selected method's type, %s have" |
1250 const char* current = _klass->external_name(); |
1247 " different Class objects for the type %s used in the signature (%s; %s)", |
1251 const char* sig = m->name_and_sig_as_C_string(); |
1248 _klass->external_name(), |
1252 const char* loader1 = java_lang_ClassLoader::describe_external(interface_loader()); |
1249 m->name_and_sig_as_C_string(), |
1253 const char* iface = InstanceKlass::cast(interf)->external_name(); |
1250 interf->class_loader_data()->loader_name_and_id(), |
1254 const char* loader2 = java_lang_ClassLoader::describe_external(method_holder_loader()); |
1251 interf->external_name(), |
1255 const char* mclass = target()->method_holder()->external_name(); |
1252 target()->method_holder()->class_loader_data()->loader_name_and_id(), |
1256 const char* failed_type_name = failed_type_symbol->as_klass_external_name(); |
1253 target()->method_holder()->external_name(), |
1257 size_t buflen = strlen(msg) + strlen(current) + strlen(sig) + |
1254 failed_type_symbol->as_klass_external_name(), |
1258 strlen(loader1) + strlen(iface) + strlen(loader2) + strlen(mclass) + |
1255 interf->class_in_module_of_loader(false, true), |
1259 strlen(failed_type_name); |
1256 target()->method_holder()->class_in_module_of_loader(false, true)); |
1260 char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); |
1257 THROW_MSG(vmSymbols::java_lang_LinkageError(), ss.as_string()); |
1261 jio_snprintf(buf, buflen, msg, current, sig, loader1, iface, |
|
1262 loader2, mclass, failed_type_name); |
|
1263 THROW_MSG(vmSymbols::java_lang_LinkageError(), buf); |
|
1264 } |
1258 } |
1265 } |
1259 } |
1266 } |
1260 } |
1267 |
1261 |
1268 // ime may have moved during GC so recalculate address |
1262 // ime may have moved during GC so recalculate address |