< prev index next >

src/share/vm/interpreter/linkResolver.cpp

Print this page




 595     Symbol* method_signature = pool->signature_ref_at(index);
 596     KlassHandle  current_klass(THREAD, pool->pool_holder());
 597     LinkInfo link_info(resolved_klass, method_name, method_signature, current_klass);
 598     return resolve_method(link_info, /*require_methodref*/false, THREAD);
 599   }
 600 
 601   LinkInfo link_info(pool, index, CHECK_NULL);
 602   resolved_klass = link_info.resolved_klass();
 603 
 604   if (pool->has_preresolution()
 605       || (resolved_klass() == SystemDictionary::MethodHandle_klass() &&
 606           MethodHandles::is_signature_polymorphic_name(resolved_klass(), link_info.name()))) {
 607     Method* result = ConstantPool::method_at_if_loaded(pool, index);
 608     if (result != NULL) {
 609       return methodHandle(THREAD, result);
 610     }
 611   }
 612 
 613   if (code == Bytecodes::_invokeinterface) {
 614     return resolve_interface_method(link_info, true, THREAD);
 615   } else if (code == Bytecodes::_invokevirtual) {
 616     return resolve_method(link_info, /*require_methodref*/true, THREAD);
 617   } else if (!resolved_klass->is_interface()) {
 618     return resolve_method(link_info, /*require_methodref*/false, THREAD);
 619   } else {
 620     bool nostatics = (code == Bytecodes::_invokestatic) ? false : true;
 621     return resolve_interface_method(link_info, nostatics, THREAD);
 622   }
 623 }
 624 
 625 // Check and print a loader constraint violation message for method or interface method
 626 void LinkResolver::check_method_loader_constraints(const LinkInfo& link_info,
 627                                                    const methodHandle& resolved_method,
 628                                                    const char* method_type, TRAPS) {
 629   Handle current_loader(THREAD, link_info.current_klass()->class_loader());
 630   Handle resolved_loader(THREAD, resolved_method->method_holder()->class_loader());
 631 
 632   ResourceMark rm(THREAD);
 633   Symbol* failed_type_symbol =
 634     SystemDictionary::check_signature_loaders(link_info.signature(), current_loader,
 635                                               resolved_loader, true, CHECK);




 595     Symbol* method_signature = pool->signature_ref_at(index);
 596     KlassHandle  current_klass(THREAD, pool->pool_holder());
 597     LinkInfo link_info(resolved_klass, method_name, method_signature, current_klass);
 598     return resolve_method(link_info, /*require_methodref*/false, THREAD);
 599   }
 600 
 601   LinkInfo link_info(pool, index, CHECK_NULL);
 602   resolved_klass = link_info.resolved_klass();
 603 
 604   if (pool->has_preresolution()
 605       || (resolved_klass() == SystemDictionary::MethodHandle_klass() &&
 606           MethodHandles::is_signature_polymorphic_name(resolved_klass(), link_info.name()))) {
 607     Method* result = ConstantPool::method_at_if_loaded(pool, index);
 608     if (result != NULL) {
 609       return methodHandle(THREAD, result);
 610     }
 611   }
 612 
 613   if (code == Bytecodes::_invokeinterface) {
 614     return resolve_interface_method(link_info, true, THREAD);
 615   } else if (code == Bytecodes::_invokevirtual || code == Bytecodes::_invokedirect) {
 616     return resolve_method(link_info, /*require_methodref*/true, THREAD);
 617   } else if (!resolved_klass->is_interface()) {
 618     return resolve_method(link_info, /*require_methodref*/false, THREAD);
 619   } else {
 620     bool nostatics = (code == Bytecodes::_invokestatic) ? false : true;
 621     return resolve_interface_method(link_info, nostatics, THREAD);
 622   }
 623 }
 624 
 625 // Check and print a loader constraint violation message for method or interface method
 626 void LinkResolver::check_method_loader_constraints(const LinkInfo& link_info,
 627                                                    const methodHandle& resolved_method,
 628                                                    const char* method_type, TRAPS) {
 629   Handle current_loader(THREAD, link_info.current_klass()->class_loader());
 630   Handle resolved_loader(THREAD, resolved_method->method_holder()->class_loader());
 631 
 632   ResourceMark rm(THREAD);
 633   Symbol* failed_type_symbol =
 634     SystemDictionary::check_signature_loaders(link_info.signature(), current_loader,
 635                                               resolved_loader, true, CHECK);


< prev index next >