summaryrefslogtreecommitdiff
path: root/test/957-methodhandle-transforms/src/Main.java
diff options
context:
space:
mode:
author Narayan Kamath <narayan@google.com> 2016-11-02 18:47:11 +0000
committer Narayan Kamath <narayan@google.com> 2016-11-03 15:13:00 +0000
commit0a8485ef5cb81746625fe57acf8adfd8b2bb28c0 (patch)
treee0d5384ad9b9ffcb549c0332a177d650614a6d3d /test/957-methodhandle-transforms/src/Main.java
parente5eb574f4c5c5afb7deb0c49d7f9eca2062347f5 (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.java20
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() {