Worked okay for me. So must be addressed in a later release. :-/
On 2012-02-07, at 1:17 PM, Jochen Theodorou wrote: > > That will produce a > > java.lang.invoke.WrongMethodTypeException: > (Ljava/lang/Object;[Ljava/lang/Object;)V cannot be called without a receiver > argument as ([Ljava/lang/Object;)Ljava/lang/Object; > > imho casting to Object and Object[] in > > mh.invokeExact((Object)Class.class, (Object[])new Class[0]); > > is without effect, since invokeExact is a vargs method an everything will > just be put into an Object[] anyway. We had not a compiler change for this > kind of thing, had we? > > bye Jochen > > Am 07.02.2012 17:52, schrieb Jim Laskey: >> Try >> >> MethodType type = MethodType.methodType(Constructor.class, >> Class[].class); >> MethodHandle mh = MethodHandles.lookup().findVirtual(Class.class, >> "getDeclaredConstructor", type); >> MethodType target = MethodType.methodType(void.class, Object.class, >> Object[].class); >> mh = MethodHandles.explicitCastArguments(mh, target); >> mh.invokeExact((Object)Class.class, (Object[])new Class[0]); >> >> Cheers, >> >> -- Jim >> >> On 2012-02-07, at 12:37 PM, Jochen Theodorou wrote: >> >>> Am 07.02.2012 17:29, schrieb Jim Laskey: >>>>>>> MethodType type = MethodType.methodType(Constructor.class, >>>>>>> Class[].class); >>>>>>> MethodHandle mh = >>>>>>> MethodHandles.lookup().findVirtual(Class.class, >>>>>>> "getDeclaredConstructor", type); >>>>>>> MethodType target = MethodType.methodType(Object.class, >>>>>>> Object.class, Object.class); >>>>>>> mh = mh.asType(target); >>>>>>> mh.invokeWithArguments(Class.class,new Class[0]); >>>> >>>> As soon as you mh = mh.asType(target); it is no longer vararg, so it >>>> is treating new Class[0] as the second argument cast to Object. If >>>> you are trying to type as (Object , Object[]). I think you are going >>>> to run into difficulties validating (Class[]) Object[]. You may have >>>> to add a wrapper to get what you want, but you could also try using >>>> asCollector. >>> >>> or in other words: I should not use invokeWithArguments for this. >>> >>> If I wanted to use the same target type... since that is what my call site >>> gives me... and I wanted to use invokeExact instead, how would I have to >>> change the program? >>> >>> bye blackdrag >>> >>> -- >>> Jochen "blackdrag" Theodorou - Groovy Project Tech Lead >>> blog: http://blackdragsview.blogspot.com/ >>> german groovy discussion newsgroup: de.comp.lang.misc >>> For Groovy programming sources visit http://groovy-lang.org >>> >> > > > -- > Jochen "blackdrag" Theodorou - Groovy Project Tech Lead > blog: http://blackdragsview.blogspot.com/ > german groovy discussion newsgroup: de.comp.lang.misc > For Groovy programming sources visit http://groovy-lang.org > _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev