Hi Remi, Jochen,
On 06/02/2016 11:15 AM, fo...@univ-mlv.fr 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?
Regards, Peter
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev