< prev index next >

test/jdk/valhalla/valuetypes/MethodHandleTest.java

Print this page
rev 55119 : 8223387: [lworld] reflection support for LW2 arrays

@@ -117,21 +117,39 @@
         for (int i=0; i < size; i++) {
             Object v = (Object)getter.invoke(array, i);
             assertEquals(v, o);
         }
 
-        // set an array element to null
         Class<?> elementType = c.getComponentType();
+        if (elementType.isValue()) {
+            assertTrue(elementType == elementType.asValueType());
+        }
+        // set an array element to null
         try {
-            // inline array element is flattenable
             Object v = (Object)setter.invoke(array, 0, null);
             assertFalse(elementType.isValue(), "should fail to set an inline class array element to null");
         } catch (NullPointerException e) {
             assertTrue(elementType.isValue(), "should only fail to set an inline class array element to null");
         }
     }
 
+    @Test
+    public static void testNullableArray() throws Throwable {
+        Class<?> arrayClass = (new Point?[0]).getClass();
+        Class<?> elementType = arrayClass.getComponentType();
+        assertTrue(elementType == Point.class.asBoxType());
+
+        MethodHandle setter = MethodHandles.arrayElementSetter(arrayClass);
+        MethodHandle getter = MethodHandles.arrayElementGetter(arrayClass);
+        MethodHandle ctor = MethodHandles.arrayConstructor(arrayClass);
+        Object[] array = (Object[]) ctor.invoke(2);
+        setter.invoke(array, 0, P);
+        setter.invoke(array, 1, null);
+        assertEquals((Point)getter.invoke(array, 0), P);
+        assertNull((Object)getter.invoke(array, 1));
+    }
+
     private final Class<?> c;
     private final Object o;
     private final List<String> names;
     public MethodHandleTest(String cn, Object o, String... fields) throws Exception {
         this.c = Class.forName(cn);
< prev index next >