Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7054590

(JSR-292) MethodHandleProxies.asInterfaceInstance() accepts private/protected nested interfaces

XMLWordPrintable

    • b10
    • generic, x86
    • generic, linux, os_x
    • Not verified

        The javadoc specification for the MethodHandleProxies.asInterfaceInstance method states:
          "The interface must be public. No additional access checks are performed."

        However, this method still accepts private/default-access/protected *nested* interfaces.

        Minimized test:
        ===============
        --- Test.java ---
        import java.lang.invoke.*;
        import static java.lang.invoke.MethodType.*;
        import static java.lang.invoke.MethodHandles.*;
        import static java.lang.invoke.MethodHandleProxies.*;

        public class Test {
           /*protected*/ /*private*/ interface PrivateIntf {
               void m();
           }

           public static class C {
               public static void m() {}
           }

           public static void main(String argv[]) throws Throwable {
               MethodHandle mh = lookup().findStatic(
                       C.class, "m", methodType(void.class));

               PrivateIntf intf = asInterfaceInstance(PrivateIntf.class, mh);
           }
        }
        --- Test.java ---

        Minimized test output:
        ======================
        $ java -showversion -verify Test
        java version "1.7.0-ea"
        Java(TM) SE Runtime Environment (build 1.7.0-ea-b145)
        Java HotSpot(TM) Server VM (build 21.0-b15, mixed mode)

              jrose John Rose
              ygaevsky Yuri Gaevsky (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: