< prev index next >

test/jdk/valhalla/valuetypes/MethodHandleTest.java

Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd

*** 30,40 **** */ import java.lang.invoke.*; import java.lang.reflect.Field; import java.lang.reflect.Modifier; ! import java.util.*; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; --- 30,40 ---- */ import java.lang.invoke.*; import java.lang.reflect.Field; import java.lang.reflect.Modifier; ! import java.util.List; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*;
*** 118,144 **** Object v = (Object)getter.invoke(array, i); assertEquals(v, o); } Class<?> elementType = c.getComponentType(); ! if (elementType.isValue()) { ! assertTrue(elementType == elementType.asValueType()); } // set an array element to null try { 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); --- 118,144 ---- Object v = (Object)getter.invoke(array, i); assertEquals(v, o); } Class<?> elementType = c.getComponentType(); ! if (elementType.isInlineClass()) { ! assertTrue(elementType == elementType.asPrimaryType()); } // set an array element to null try { Object v = (Object)setter.invoke(array, 0, null); ! assertFalse(elementType.isInlineClass(), "should fail to set an inline class array element to null"); } catch (NullPointerException e) { ! assertTrue(elementType.isInlineClass(), "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.asNullableType(), arrayClass.getComponentType().toString()); MethodHandle setter = MethodHandles.arrayElementSetter(arrayClass); MethodHandle getter = MethodHandles.arrayElementGetter(arrayClass); MethodHandle ctor = MethodHandles.arrayConstructor(arrayClass); Object[] array = (Object[]) ctor.invoke(2);
*** 161,171 **** for (String name : names) { Field f = c.getDeclaredField(name); unreflectField(f); findGetter(f); varHandle(f); ! if (c.isValue()) ensureImmutable(f); else ensureNullable(f); } } --- 161,171 ---- for (String name : names) { Field f = c.getDeclaredField(name); unreflectField(f); findGetter(f); varHandle(f); ! if (c.isInlineClass()) ensureImmutable(f); else ensureNullable(f); } }
*** 194,204 **** * The field must be flattenable but may or may not be flattened. */ void setValueField(String name, Object obj, Object value) throws Throwable { Field f = c.getDeclaredField(name); boolean isStatic = Modifier.isStatic(f.getModifiers()); ! assertTrue(f.getType().isValue()); assertTrue((isStatic && obj == null) || (!isStatic && obj != null)); Object v = f.get(obj); // Field::set try { --- 194,204 ---- * The field must be flattenable but may or may not be flattened. */ void setValueField(String name, Object obj, Object value) throws Throwable { Field f = c.getDeclaredField(name); boolean isStatic = Modifier.isStatic(f.getModifiers()); ! assertTrue(f.getType().isInlineClass()); assertTrue((isStatic && obj == null) || (!isStatic && obj != null)); Object v = f.get(obj); // Field::set try {
*** 260,271 **** * Test setting the given field to null via reflection, method handle * and var handle. */ void ensureNullable(Field f) throws Throwable { assertFalse(Modifier.isStatic(f.getModifiers())); ! // flattenable implies non-nullable ! boolean canBeNull = !isFlattenable(f); // test reflection try { f.set(o, null); assertTrue(canBeNull, f + " cannot be set to null"); } catch (NullPointerException e) { --- 260,270 ---- * Test setting the given field to null via reflection, method handle * and var handle. */ void ensureNullable(Field f) throws Throwable { assertFalse(Modifier.isStatic(f.getModifiers())); ! boolean canBeNull = f.getType().isNullableType(); // test reflection try { f.set(o, null); assertTrue(canBeNull, f + " cannot be set to null"); } catch (NullPointerException e) {
*** 313,323 **** } boolean isFlattened(Field f) { return (f.getModifiers() & 0x00008000) == 0x00008000; } - - boolean isFlattenable(Field f) { - return (f.getModifiers() & 0x00000100) == 0x00000100; - } - } --- 312,317 ----
< prev index next >