----- Mail original ----- > De: "Peter Levart" <[email protected]> > À: [email protected] > Cc: "Da Vinci Machine Project" <[email protected]>, "jochen > Theodorou" <[email protected]> > Envoyé: Jeudi 2 Juin 2016 15:23:44 > Objet: Re: proxy an interface and call a default method
> Hi Remi, Jochen, > On 06/02/2016 11:15 AM, [email protected] wrote: > > > > The solution could be for Proxy API to provide a MH that was already > > > > > bound to the Proxy instance. Such pre-bound MH could not be abused > > > > then. > > > > > independently of any security issue, it may be a good idea but doing a > > partial evaluation on a MH is not cheap. > > I created a prototype for this: > http://cr.openjdk.java.net/~plevart/jdk9-dev/Proxy.invokeSuperDefaults/webrev.01/ > Example usage is as follows: > public class Test { > interface I { > default void m() { > System.out.println("default I.m() called"); > } > } > public static void main(String[] args) { > InvocationHandler h = (proxy, method, params) -> { > System.out.println("InvocationHandler called for: " + method); > MethodHandle superM = ((Proxy) proxy).findSuper(I.class, "m", > MethodType.methodType(void.class)); > return superM.invokeWithArguments(params); > }; > I i = (I) Proxy.newProxyInstance( > I.class.getClassLoader(), new Class<?>[]{I.class}, h); > i.m(); > } > } > It works, but in order for this to have adequate performance, caching would > have to be added. But caching a pre-bound MH would require caching on > per-proxy-instance basis, which would not be very efficient. So perhaps, > instead of providing a Proxy::findSuper method that returns a pre-bound MH, > there could simply be a method like the following in the Proxy class: > public final Object invokeSuper(Class<?> interfaze, String methodName, > MethodType methodType, Object ... args) { ... } > What do you think? yes, good idea, i think it should be static (and takes a Proxy as parameter) to avoid unwanted overriding. > Regards, Peter Rémi
_______________________________________________ mlvm-dev mailing list [email protected] http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
