2707 java_lang_invoke_MemberName::set_name (mname(), name_str()); |
2707 java_lang_invoke_MemberName::set_name (mname(), name_str()); |
2708 java_lang_invoke_MemberName::set_type (mname(), signature_str()); |
2708 java_lang_invoke_MemberName::set_type (mname(), signature_str()); |
2709 java_lang_invoke_MemberName::set_flags(mname(), MethodHandles::ref_kind_to_flags(ref_kind)); |
2709 java_lang_invoke_MemberName::set_flags(mname(), MethodHandles::ref_kind_to_flags(ref_kind)); |
2710 |
2710 |
2711 if (ref_kind == JVM_REF_invokeVirtual && |
2711 if (ref_kind == JVM_REF_invokeVirtual && |
2712 callee->name() == vmSymbols::java_lang_invoke_MethodHandle() && |
2712 MethodHandles::is_signature_polymorphic_public_name(callee, name)) { |
2713 (name == vmSymbols::invoke_name() || name == vmSymbols::invokeExact_name())) { |
2713 // Skip resolution for public signature polymorphic methods such as |
2714 // Skip resolution for j.l.i.MethodHandle.invoke()/invokeExact(). |
2714 // j.l.i.MethodHandle.invoke()/invokeExact() and those on VarHandle |
2715 // They are public signature polymorphic methods, but require appendix argument |
2715 // They require appendix argument which MemberName resolution doesn't handle. |
2716 // which MemberName resolution doesn't handle. There's special logic on JDK side to handle them |
2716 // There's special logic on JDK side to handle them |
2717 // (see MethodHandles.linkMethodHandleConstant() and MethodHandles.findVirtualForMH()). |
2717 // (see MethodHandles.linkMethodHandleConstant() and MethodHandles.findVirtualForMH()). |
2718 } else { |
2718 } else { |
2719 MethodHandles::resolve_MemberName(mname, caller, /*speculative_resolve*/false, CHECK_(empty)); |
2719 MethodHandles::resolve_MemberName(mname, caller, /*speculative_resolve*/false, CHECK_(empty)); |
2720 } |
2720 } |
2721 |
2721 |