diff -r 38048d4d20e7 -r fd4bc78630b1 hotspot/src/share/vm/interpreter/linkResolver.cpp --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Fri May 26 13:47:33 2017 -0700 +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Sat May 27 09:21:01 2017 -0400 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "classfile/defaultMethods.hpp" +#include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" @@ -131,7 +132,7 @@ } // utility query for unreflecting a method -CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass) { +CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass, TRAPS) { Klass* resolved_method_holder = resolved_method->method_holder(); if (resolved_klass == NULL) { // 2nd argument defaults to holder of 1st resolved_klass = resolved_method_holder; @@ -180,9 +181,19 @@ _call_kind = kind; _call_index = index; _resolved_appendix = Handle(); + // Find or create a ResolvedMethod instance for this Method* + set_resolved_method_name(CHECK); + DEBUG_ONLY(verify()); } +void CallInfo::set_resolved_method_name(TRAPS) { + Method* m = _resolved_method(); + assert(m != NULL, "Should already have a Method*"); + oop rmethod_name = java_lang_invoke_ResolvedMethodName::find_resolved_method(m, CHECK); + _resolved_method_name = Handle(THREAD, rmethod_name); +} + #ifdef ASSERT void CallInfo::verify() { switch (call_kind()) { // the meaning and allowed value of index depends on kind