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();
|