< prev index next >

test/valhalla/mvt/ConstructorTest.java

Print this page
rev 17247 : [mq]: find-constructor

*** 19,129 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ - import jdk.experimental.value.MethodHandleBuilder; import jdk.experimental.value.ValueType; import org.testng.annotations.Test; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; ! import static org.testng.Assert.*; /* * @test ! * @run testng/othervm -Xverify:none -XX:+EnableMVT -Dvalhalla.enablePoolPatches=true WithFieldTest */ @Test ! public class WithFieldTest { ! static final ValueType<?> VT_Point = ValueType.forClass(Point.class); ! ! static final ValueType<?> VT_PrivatePoint = ValueType.forClass(PrivatePoint.class); ! ! static final MethodHandle MH_Point_get_x; ! ! static final MethodHandle MH_PrivatePoint_get_x; static { try { ! MH_Point_get_x = MethodHandles.lookup().findGetter( ! Point.class, "x", int.class); ! MH_PrivatePoint_get_x = MethodHandles.lookup().findVirtual( ! PrivatePoint.class, "getX", MethodType.methodType(int.class)); } catch (Exception e) { throw new InternalError(e); } } ! ! public void testPrivateLookupPrivateFieldUsingVCC() throws Throwable { ! testPrivateAccess(VT_PrivatePoint, VT_PrivatePoint.boxClass(), MethodHandles.lookup(), MH_PrivatePoint_get_x); ! } ! ! public void testPrivateLookupPublicFieldUsingVCC() throws Throwable { ! testPrivateAccess(VT_Point, VT_Point.boxClass(), MethodHandles.lookup(), MH_Point_get_x); ! } ! ! public void testPrivateLookupPrivateFieldUsingDVT() throws Throwable { ! testPrivateAccess(VT_PrivatePoint, VT_PrivatePoint.valueClass(), MethodHandles.lookup(), MH_PrivatePoint_get_x); ! } ! ! public void testPrivateLookupPublicFieldUsingDVT() throws Throwable { ! testPrivateAccess(VT_Point, VT_Point.valueClass(), MethodHandles.lookup(), MH_Point_get_x); ! } ! ! ! @Test(expectedExceptions = IllegalAccessError.class) ! public void testLookupPrivateFieldUsingVCC() throws Throwable { ! testAccess(VT_PrivatePoint, MethodHandles.lookup(), MH_PrivatePoint_get_x); ! } ! ! @Test(expectedExceptions = IllegalAccessError.class) ! public void testLookupPublicFieldUsingVCC() throws Throwable { ! testAccess(VT_Point, MethodHandles.lookup(), MH_Point_get_x); ! } ! ! @Test(expectedExceptions = IllegalAccessError.class) ! public void testLookupPrivateFieldUsingDVT() throws Throwable { ! testAccess(VT_PrivatePoint, MethodHandles.lookup(), MH_PrivatePoint_get_x); ! } ! ! @Test(expectedExceptions = IllegalAccessError.class) ! public void testLookupPublicFieldUsingDVT() throws Throwable { ! testAccess(VT_Point, MethodHandles.lookup(), MH_Point_get_x); ! } ! ! ! static void testPrivateAccess(ValueType<?> vt, Class<?> lc, MethodHandles.Lookup l, MethodHandle getter) throws Throwable { ! testAccess(vt, MethodHandles.privateLookupIn(lc, l), getter); } ! static void testAccess(ValueType<?> vt, MethodHandles.Lookup l, MethodHandle getter) throws Throwable { ! MethodHandle mh = MethodHandles.collectArguments(vwithfield(l, vt, "x", int.class), 0, vt.defaultValueConstant()); ! ! mh = MethodHandles.filterReturnValue(mh, vt.box()); ! ! mh = MethodHandles.filterReturnValue(mh, getter); ! ! int actual = (int) mh.invoke(42); ! assertEquals(actual, 42); ! } ! ! static MethodHandle vwithfield(MethodHandles.Lookup lookup, ValueType<?> vt, String name, Class<?> type) { ! Class<?> dvt = vt.valueClass(); ! return MethodHandleBuilder.loadCode( ! lookup, ! lookup.lookupClass().toString() + "_wither$" + name, ! MethodType.methodType(dvt, dvt, type), ! C -> C.vload(0).load(1).vwithfield(dvt, name, fieldDescriptor(type)).vreturn()); } - - static String fieldDescriptor(Class<?> type) { - String s = MethodType.methodType(type).toMethodDescriptorString(); - return s.substring(2); } - } --- 19,70 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import jdk.experimental.value.ValueType; import org.testng.annotations.Test; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; ! import static org.testng.Assert.assertEquals; ! import static org.testng.Assert.fail; ! import static org.testng.AssertJUnit.assertTrue; /* * @test ! * @run testng/othervm -Xverify:none -XX:+EnableMVT -Dvalhalla.enablePoolPatches=true ConstructorTest */ @Test ! public class ConstructorTest { ! static final ValueType<?> VT_Interval = ValueType.forClass(Interval.class); + static final MethodHandle VT_constructor; static { try { ! MethodHandle mh = VT_Interval.findConstructor(MethodHandles.lookup(), ! MethodType.methodType(void.class, int.class, int.class)); ! VT_constructor = MethodHandles.filterReturnValue(mh, VT_Interval.box()); } catch (Exception e) { throw new InternalError(e); } } ! public void testConstructorWithValidArguments() throws Throwable { ! Interval i = (Interval) VT_constructor.invoke(1, 2); ! assertEquals(i.l, 1); ! assertEquals(i.u, 2); } ! public void testConstructorWithIllegalArguments() throws Throwable { ! try { ! Interval i = (Interval) VT_constructor.invoke(3, 1); ! fail(); ! } catch (Throwable t) { ! assertTrue(IllegalArgumentException.class.isInstance(t)); } } }
< prev index next >