< prev index next >

test/jdk/java/lang/invoke/defineHiddenClass/HiddenNestmateTest.java

Print this page

151     public void notSamePackage() throws Throwable {
152         MethodHandles.lookup().defineHiddenClass(classBytes("p/HiddenInjected"), false, NESTMATE);
153     }
154 
155     /*
156      * invoke int test(HiddenNestmateTest o) method defined in the injected class
157      */
158     private int testInjectedClass(Class<?> c) throws Throwable {
159         try {
160             Method m = c.getMethod("test", HiddenNestmateTest.class);
161             return (int) m.invoke(c.newInstance(), this);
162         } catch (InvocationTargetException e) {
163             throw e.getCause();
164         }
165     }
166 
167     private static byte[] classBytes(String classname) {
168         ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES);
169         MethodVisitor mv;
170 
171         cw.visit(V12, ACC_FINAL, classname, null, "java/lang/Object", null);
172 
173         {
174             mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
175             mv.visitCode();
176             mv.visitVarInsn(ALOAD, 0);
177             mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
178             mv.visitInsn(RETURN);
179             mv.visitMaxs(0, 0);
180             mv.visitEnd();
181         }
182         {
183             // access a private member of the nest host class
184             mv = cw.visitMethod(ACC_PUBLIC, "test", "(LHiddenNestmateTest;)I", null, null);
185             mv.visitCode();
186             mv.visitVarInsn(ALOAD, 0);
187             mv.visitVarInsn(ALOAD, 1);
188             mv.visitMethodInsn(INVOKEVIRTUAL, "HiddenNestmateTest", "privMethod", "()I");
189             mv.visitInsn(IRETURN);
190             mv.visitMaxs(0, 0);
191             mv.visitEnd();

151     public void notSamePackage() throws Throwable {
152         MethodHandles.lookup().defineHiddenClass(classBytes("p/HiddenInjected"), false, NESTMATE);
153     }
154 
155     /*
156      * invoke int test(HiddenNestmateTest o) method defined in the injected class
157      */
158     private int testInjectedClass(Class<?> c) throws Throwable {
159         try {
160             Method m = c.getMethod("test", HiddenNestmateTest.class);
161             return (int) m.invoke(c.newInstance(), this);
162         } catch (InvocationTargetException e) {
163             throw e.getCause();
164         }
165     }
166 
167     private static byte[] classBytes(String classname) {
168         ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES);
169         MethodVisitor mv;
170 
171         cw.visit(V12, ACC_FINAL|ACC_IDENTITY, classname, null, "java/lang/Object", null);
172 
173         {
174             mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
175             mv.visitCode();
176             mv.visitVarInsn(ALOAD, 0);
177             mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
178             mv.visitInsn(RETURN);
179             mv.visitMaxs(0, 0);
180             mv.visitEnd();
181         }
182         {
183             // access a private member of the nest host class
184             mv = cw.visitMethod(ACC_PUBLIC, "test", "(LHiddenNestmateTest;)I", null, null);
185             mv.visitCode();
186             mv.visitVarInsn(ALOAD, 0);
187             mv.visitVarInsn(ALOAD, 1);
188             mv.visitMethodInsn(INVOKEVIRTUAL, "HiddenNestmateTest", "privMethod", "()I");
189             mv.visitInsn(IRETURN);
190             mv.visitMaxs(0, 0);
191             mv.visitEnd();
< prev index next >