< 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 >