# HG changeset patch # User attila # Date 1444638452 -7200 # Node ID f1e00197031f0f9c780d02ca55bf8c8c5e13aa01 # Parent 7db0663a5e968059fa7c772172187ebd60b6492d 8139273: Small improvements to DynamicLinker and DynamicLinkerFactory Reviewed-by: lagergren, sundar diff -r 7db0663a5e96 -r f1e00197031f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinker.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinker.java Wed Jul 05 20:53:25 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinker.java Mon Oct 12 10:27:32 2015 +0200 @@ -150,12 +150,13 @@ * * @author Attila Szegedi */ -public class DynamicLinker { +public final class DynamicLinker { private static final String CLASS_NAME = DynamicLinker.class.getName(); private static final String RELINK_METHOD_NAME = "relink"; private static final String INITIAL_LINK_CLASS_NAME = "java.lang.invoke.MethodHandleNatives"; private static final String INITIAL_LINK_METHOD_NAME = "linkCallSite"; + private static final String INVOKE_PACKAGE_PREFIX = "java.lang.invoke."; private final LinkerServices linkerServices; private final GuardedInvocationFilter prelinkFilter; @@ -305,26 +306,21 @@ final StackTraceElement[] trace = new Throwable().getStackTrace(); for(int i = 0; i < trace.length - 1; ++i) { final StackTraceElement frame = trace[i]; + // If we found any of our linking entry points on the stack... if(isRelinkFrame(frame) || isInitialLinkFrame(frame)) { - return trace[i + 1]; + // ... then look for the first thing calling it that isn't j.l.invoke + for (int j = i + 1; j < trace.length; ++j) { + final StackTraceElement frame2 = trace[j]; + if (!frame2.getClassName().startsWith(INVOKE_PACKAGE_PREFIX)) { + return frame2; + } + } } } return null; } /** - * Deprecated because of imprecise name. - * - * @deprecated Use {@link #getLinkedCallSiteLocation()} instead. - * - * @return see non-deprecated method - */ - @Deprecated - public static StackTraceElement getRelinkedCallSiteLocation() { - return getLinkedCallSiteLocation(); - } - - /** * Returns {@code true} if the frame represents {@code MethodHandleNatives.linkCallSite()}, * the frame immediately on top of the call site frame when the call site is * being linked for the first time. diff -r 7db0663a5e96 -r f1e00197031f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinkerFactory.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinkerFactory.java Wed Jul 05 20:53:25 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/DynamicLinkerFactory.java Mon Oct 12 10:27:32 2015 +0200 @@ -118,7 +118,7 @@ * * @author Attila Szegedi */ -public class DynamicLinkerFactory { +public final class DynamicLinkerFactory { /** * Default value for {@link #setUnstableRelinkThreshold(int) unstable relink threshold}. */