1.1 --- a/src/jdk/internal/dynalink/beans/AbstractJavaLinker.java Mon Nov 03 07:28:08 2014 +0100 1.2 +++ b/src/jdk/internal/dynalink/beans/AbstractJavaLinker.java Mon Nov 03 07:29:46 2014 +0100 1.3 @@ -287,10 +287,21 @@ 1.4 */ 1.5 private static SingleDynamicMethod createDynamicMethod(final AccessibleObject m) { 1.6 if(CallerSensitiveDetector.isCallerSensitive(m)) { 1.7 + // Method has @CallerSensitive annotation 1.8 return new CallerSensitiveDynamicMethod(m); 1.9 } 1.10 + // Method has no @CallerSensitive annotation 1.11 + final MethodHandle mh; 1.12 + try { 1.13 + mh = unreflectSafely(m); 1.14 + } catch (final IllegalAccessError e) { 1.15 + // java.lang.invoke can in some case conservatively treat as caller sensitive methods that aren't 1.16 + // marked with the annotation. In this case, we'll fall back to treating it as caller sensitive. 1.17 + return new CallerSensitiveDynamicMethod(m); 1.18 + } 1.19 + // Proceed with non-caller sensitive 1.20 final Member member = (Member)m; 1.21 - return new SimpleDynamicMethod(unreflectSafely(m), member.getDeclaringClass(), member.getName(), m instanceof Constructor); 1.22 + return new SimpleDynamicMethod(mh, member.getDeclaringClass(), member.getName(), m instanceof Constructor); 1.23 } 1.24 1.25 /**