diff options
author | 2016-11-02 18:47:11 +0000 | |
---|---|---|
committer | 2016-11-03 15:13:00 +0000 | |
commit | 0a8485ef5cb81746625fe57acf8adfd8b2bb28c0 (patch) | |
tree | e0d5384ad9b9ffcb549c0332a177d650614a6d3d /test/957-methodhandle-transforms/src/Main.java | |
parent | e5eb574f4c5c5afb7deb0c49d7f9eca2062347f5 (diff) |
MethodHandles: Implement MethodHandle.asType.
Tracks libcore change 16fa583fb5ee489.
Test: make test-art-host
Bug: 30550796
Change-Id: I2457b563f67a183c4eebf94ddbe74cc55f772ee0
Diffstat (limited to 'test/957-methodhandle-transforms/src/Main.java')
-rw-r--r-- | test/957-methodhandle-transforms/src/Main.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/957-methodhandle-transforms/src/Main.java b/test/957-methodhandle-transforms/src/Main.java index 4a27086924..e50391b299 100644 --- a/test/957-methodhandle-transforms/src/Main.java +++ b/test/957-methodhandle-transforms/src/Main.java @@ -90,6 +90,12 @@ public class Main { // it's IAE and should be WMTE instead. } + // Check that asType works as expected. + transform = MethodHandles.dropArguments(delegate, 0, int.class, Object.class); + transform = transform.asType(MethodType.methodType(void.class, + new Class<?>[] { short.class, Object.class, String.class, long.class })); + transform.invokeExact((short) 45, new Object(), "foo", 42l); + // Invalid argument location, should not be allowed. try { MethodHandles.dropArguments(delegate, -1, int.class, Object.class); @@ -183,6 +189,14 @@ public class Main { assertEquals("java.lang.IllegalArgumentException: exceptionMessage", returnVal); returnVal = (String) adapter.invokeExact("foo", 42l, "exceptionMessage2"); assertEquals("java.lang.IllegalArgumentException: exceptionMessage2", returnVal); + + // Check that asType works as expected. + adapter = MethodHandles.catchException(target, IllegalArgumentException.class, + handler); + adapter = adapter.asType(MethodType.methodType(String.class, + new Class<?>[] { String.class, int.class, String.class })); + returnVal = (String) adapter.invokeExact("foo", 42, "exceptionMessage"); + assertEquals("java.lang.IllegalArgumentException: exceptionMessage", returnVal); } public static boolean testGuardWithTest_test(String arg1, long arg2) { @@ -225,6 +239,12 @@ public class Main { assertEquals("fallback", returnVal); returnVal = (String) adapter.invokeExact("target", 42l, 56); assertEquals("target", returnVal); + + // Check that asType works as expected. + adapter = adapter.asType(MethodType.methodType(String.class, + new Class<?>[] { String.class, int.class, int.class })); + returnVal = (String) adapter.invokeExact("target", 42, 56); + assertEquals("target", returnVal); } public static void fail() { |