src/jdk/internal/dynalink/beans/AbstractJavaLinker.java

changeset 1081
a54684572f14
parent 963
e2497b11a021
child 1183
6ed91931b5a7
     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      /**

mercurial