src/hotspot/share/classfile/systemDictionary.cpp
changeset 48596 860326263d1f
parent 48514 9608f7f41c4e
child 48826 c4d9d1b08e2e
equal deleted inserted replaced
48595:5d699d81c10c 48596:860326263d1f
  2773   Handle mname = MemberName_klass()->allocate_instance_handle(CHECK_(empty));
  2773   Handle mname = MemberName_klass()->allocate_instance_handle(CHECK_(empty));
  2774   java_lang_invoke_MemberName::set_clazz(mname(), callee->java_mirror());
  2774   java_lang_invoke_MemberName::set_clazz(mname(), callee->java_mirror());
  2775   java_lang_invoke_MemberName::set_name (mname(), name_str());
  2775   java_lang_invoke_MemberName::set_name (mname(), name_str());
  2776   java_lang_invoke_MemberName::set_type (mname(), signature_str());
  2776   java_lang_invoke_MemberName::set_type (mname(), signature_str());
  2777   java_lang_invoke_MemberName::set_flags(mname(), MethodHandles::ref_kind_to_flags(ref_kind));
  2777   java_lang_invoke_MemberName::set_flags(mname(), MethodHandles::ref_kind_to_flags(ref_kind));
  2778   MethodHandles::resolve_MemberName(mname, caller, CHECK_(empty));
  2778 
       
  2779   if (ref_kind == JVM_REF_invokeVirtual &&
       
  2780       callee->name() == vmSymbols::java_lang_invoke_MethodHandle() &&
       
  2781       (name == vmSymbols::invoke_name() || name == vmSymbols::invokeExact_name())) {
       
  2782     // Skip resolution for j.l.i.MethodHandle.invoke()/invokeExact().
       
  2783     // They are public signature polymorphic methods, but require appendix argument
       
  2784     // which MemberName resolution doesn't handle. There's special logic on JDK side to handle them
       
  2785     // (see MethodHandles.linkMethodHandleConstant() and MethodHandles.findVirtualForMH()).
       
  2786   } else {
       
  2787     MethodHandles::resolve_MemberName(mname, caller, CHECK_(empty));
       
  2788   }
  2779 
  2789 
  2780   // After method/field resolution succeeded, it's safe to resolve MH signature as well.
  2790   // After method/field resolution succeeded, it's safe to resolve MH signature as well.
  2781   Handle type = MethodHandles::resolve_MemberName_type(mname, caller, CHECK_(empty));
  2791   Handle type = MethodHandles::resolve_MemberName_type(mname, caller, CHECK_(empty));
  2782 
  2792 
  2783   // call java.lang.invoke.MethodHandleNatives::linkMethodHandleConstant(Class caller, int refKind, Class callee, String name, Object type) -> MethodHandle
  2793   // call java.lang.invoke.MethodHandleNatives::linkMethodHandleConstant(Class caller, int refKind, Class callee, String name, Object type) -> MethodHandle