--- old/src/java.base/share/classes/java/lang/invoke/MemberName.java 2016-04-11 14:14:48.000000000 -0700 +++ new/src/java.base/share/classes/java/lang/invoke/MemberName.java 2016-04-11 14:14:48.000000000 -0700 @@ -43,6 +43,9 @@ import static java.lang.invoke.MethodHandleStatics.*; import java.util.Objects; +import jdk.internal.misc.JavaLangInvokeAccess; +import jdk.internal.misc.SharedSecrets; + /** * A {@code MemberName} is a compact symbolic datum which fully characterizes * a method or field reference. @@ -1127,15 +1130,25 @@ } static { - // Allow privileged classes outside of java.lang - jdk.internal.misc.SharedSecrets.setJavaLangInvokeAccess(new jdk.internal.misc.JavaLangInvokeAccess() { + // StackFrameInfo stores Member and this provides the shared secrets + // for stack walker to access MemberName information. + SharedSecrets.setJavaLangInvokeAccess(new JavaLangInvokeAccess() { + @Override public Object newMemberName() { return new MemberName(); } + + @Override public String getName(Object mname) { MemberName memberName = (MemberName)mname; return memberName.getName(); } + + @Override + public boolean isNative(Object mname) { + MemberName memberName = (MemberName)mname; + return memberName.isNative(); + } }); } }