122
123 // test setAccessible
124 checkSetAccessible(c, "realTest");
125 checkSetAccessible(c, "test");
126 }
127
128 // primitive class is not a hidden class
129 @Test
130 public void primitiveClass() {
131 assertFalse(int.class.isHidden());
132 assertFalse(String.class.isHidden());
133 }
134
135 private void testHiddenArray(Class<?> type) throws Exception {
136 // array of hidden class
137 Object array = Array.newInstance(type, 2);
138 Class<?> arrayType = array.getClass();
139 assertTrue(arrayType.isArray());
140 assertTrue(Array.getLength(array) == 2);
141 assertFalse(arrayType.isHidden());
142 assertTrue(arrayType.getName().startsWith("[LHiddenClass/"), "unexpected name: " + arrayType.getName());
143
144 assertTrue(arrayType.getComponentType().isHidden());
145 assertTrue(arrayType.getComponentType() == type);
146 Object t = type.newInstance();
147 Array.set(array, 0, t);
148 Object o = Array.get(array, 0);
149 assertTrue(o == t);
150 }
151
152 private void checkSetAccessible(Class<?> c, String name, Class<?>... ptypes) throws Exception {
153 Method m = c.getDeclaredMethod(name, ptypes);
154 assertTrue(m.trySetAccessible());
155 m.setAccessible(true);
156 }
157
158 // Define a hidden class that uses lambda
159 // This verifies LambdaMetaFactory supports the caller which is a hidden class
160 @Test
161 public void testLambda() throws Throwable {
162 HiddenTest t = (HiddenTest)defineHiddenClass("Lambda").newInstance();
|
122
123 // test setAccessible
124 checkSetAccessible(c, "realTest");
125 checkSetAccessible(c, "test");
126 }
127
128 // primitive class is not a hidden class
129 @Test
130 public void primitiveClass() {
131 assertFalse(int.class.isHidden());
132 assertFalse(String.class.isHidden());
133 }
134
135 private void testHiddenArray(Class<?> type) throws Exception {
136 // array of hidden class
137 Object array = Array.newInstance(type, 2);
138 Class<?> arrayType = array.getClass();
139 assertTrue(arrayType.isArray());
140 assertTrue(Array.getLength(array) == 2);
141 assertFalse(arrayType.isHidden());
142 assertTrue(arrayType.getName().matches("\\[LHiddenClass;/0x[0-9a-f]+"), "unexpected name: " + arrayType.getName());
143
144 assertTrue(arrayType.getComponentType().isHidden());
145 assertTrue(arrayType.getComponentType() == type);
146 Object t = type.newInstance();
147 Array.set(array, 0, t);
148 Object o = Array.get(array, 0);
149 assertTrue(o == t);
150 }
151
152 private void checkSetAccessible(Class<?> c, String name, Class<?>... ptypes) throws Exception {
153 Method m = c.getDeclaredMethod(name, ptypes);
154 assertTrue(m.trySetAccessible());
155 m.setAccessible(true);
156 }
157
158 // Define a hidden class that uses lambda
159 // This verifies LambdaMetaFactory supports the caller which is a hidden class
160 @Test
161 public void testLambda() throws Throwable {
162 HiddenTest t = (HiddenTest)defineHiddenClass("Lambda").newInstance();
|