Thanks, Chris. I've used this trick to implement "nop" in invokebinder:
MethodHandle ignoreException = Binder .from(void.class, RuntimeException.class, String[].class) .nop(); - Charlie On Tue, Jan 24, 2012 at 2:53 AM, Noctarius <m...@noctarius.com> wrote: > Hi Charlie > The same "hack" applies to every situation where a generic > returntype "needs" to defined but is not needed in the end. Void > is the wrapper type to void and the returnvalue is just discarded > whatever it was. > > Cheers > Chris > > Am 24.01.2012 08:26, schrieb Charles Oliver Nutter: >> Oh, that does seem to work...what an ugly hack. And actually, >> you can just use Object.class but cast the resulting return to >> void, and it works. >> >> So basically, I do this: >> >> handler = MethodHandles.constant(Object.class, null) handler = >> MethodHandles.asType(void.class) handler = >> MethodHandles.dropArguments(0, Throwable.class, String.class) >> >> And then use that as the exception handler. >> >> It's not exactly the no-op I wanted, since it has the cast >> logic in there, but it's close enough. >> >> FWIW, I'm using this in the tests for invokebinder, for testing >> the tryFinally operation: >> >> public void testTryFinally3() throws Throwable { MethodHandle >> post = Binder .from(void.class, String[].class) >> .invokeStatic(MethodHandles.lookup(), BinderTest.class, >> "finallyLogic"); >> >> MethodHandle ignoreException = Binder .from(void.class, >> RuntimeException.class, String[].class) .drop(0, 2) >> .cast(Object.class) .constant(null); >> >> MethodHandle handle = Binder .from(void.class, String[].class) >> .tryFinally(post) .catchException(RuntimeException.class, >> ignoreException) .invokeStatic(MethodHandles.lookup(), >> BinderTest.class, "setZeroToFooAndRaise"); >> >> assertEquals(MethodType.methodType(void.class, String[].class), >> handle.type()); String[] stringAry = new String[1]; try { >> handle.invokeExact(stringAry); } catch (RuntimeException re) { >> assertTrue("should not have reached here", false); } >> assertEquals("foofinally", stringAry[0]); } >> >> invokebinder is my MethodHandle DSL, so I don't have to stand >> on my head while building MH chains :) >> >> https://github.com/headius/invokebinder >> >> - Charlie >> >> On Tue, Jan 24, 2012 at 1:07 AM, Noctarius <m...@noctarius.com> >> wrote: >>> Hi Charly, >>> >>> why not use Void and return null what behaves like using void >>> as the return type. >>> >>> Cheers Chris >>> >>> Am 24.01.2012 08:01, schrieb Charles Oliver Nutter: >>>> I discovered a possible gap in the MethodHandles API. >>>> >>>> Say I want to create an exception handler that does nothing >>>> but ignore the exception. The target handle is a method >>>> that looks like this: >>>> >>>> void foo(String) >>>> >>>> I have my "target" handle pointing at foo. >>>> >>>> I want to catch all Throwable and ignore them, so I would >>>> build up a method handle chain that does the following >>>> (top-down) >>>> >>>> 1. receives arguments (Throwable, String) and returns void >>>> 2. drops both arguments 3. ??? >>>> >>>> There's no endpoint I can attach it to for a "no-op" void >>>> return. >>>> >>>> "constant" doesn't work because it returns a value, and >>>> explicitly forbids void return type. >>>> >>>> "identity" doesn't work because it returns a value and >>>> receives one argument. >>>> >>>> What I need here is something like MethodHandles.constant, >>>> but that takes no arguments and has a void return. >>>> MethodHandles.nop anyone? >>>> >>>> I could filterReturn, but I still would have to attach it >>>> to an external method...there's no way to create a filter >>>> that returns void entirely with method handles. >>>> >>>> Am I missing something? >>>> >>>> - Charlie _______________________________________________ >>>> mlvm-dev mailing list mlvm-dev@openjdk.java.net >>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>> >>> >>> -- >>> >>> >>> ############################## # A Digital's Life >>> # ############################## Nickname: Noctarius >>> Location: Germany >>> >>> Meet me at: Ohloh: http://www.ohloh.net/accounts/noctarius >>> Web: http://www.noctarius.com XMPP/Jabber: >>> noctar...@jabber.ccc.de >>> _______________________________________________ mlvm-dev >>> mailing list mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> _______________________________________________ mlvm-dev >> mailing list mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > > -- > > > ############################## > # A Digital's Life # > ############################## > Nickname: Noctarius > Location: Germany > > Meet me at: > Ohloh: http://www.ohloh.net/accounts/noctarius > Web: http://www.noctarius.com > XMPP/Jabber: noctar...@jabber.ccc.de > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev