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