On Wed, 28 Oct 2020 19:28:36 GMT, Mandy Chung <mch...@openjdk.org> wrote:

>> Hi Mandy and Peter,
>> reading your exchanges, i wonder if it's not better to stop trying to add 
>> more and more features to the already clunky java.lang.reflect.Proxy but 
>> instead to move to provide the same set of feature but using an 
>> implementation based on java.lang.invoke.Lookup/MethodHandle.
>> 
>> I propose to introduce a java.lang.invoke.Proxy has a replacement of 
>> java.lang.reflect.Proxy using j.l.i.MethodHandle instead of j.l.r.Method, 
>> the equivalent of the InvocationHandler acting as a linker called once per 
>> the first time a method of the Proxy is called instead of being called each 
>> time a method is called.
>> 
>> Such proxy
>> - has it's security model based on Lookup to define the class,
>>   so no supplementary restrictions on package/module of the interface 
>> implemented
>> - avoid to mix java.lang.reflect API and java.invoke API
>> - is transparent in term of exceptions (ther are propagated without any 
>> wrapping/unwrapping)
>> - can support default methods natively
>> - doesn't requires any caching (the user will be responsible to do the 
>> caching)
>> - is more efficient, actually as efficient as the equivalent written code or 
>> a little more (thanks to @ForceInline)
>
> Hi Remi,
> 
> I appreciate your proposal to modernize Proxy API.   There are several 
> requests for this enhancement to support default methods in Proxy.   Defining 
> a new `java.lang.invoke.Proxy` is a much bigger project that I can't tell 
> when the existing users of `java.lang.reflect.Proxy` will be able to get this 
> default method invocation support.  
> 
> I do agree that this API design has many challenges caused by what you listed 
> above.   Well, I believe we are very close to have a consensus:
> 1. New `newProxyInstance` factory method takes a handler factory doing the 
> access check
> 2. Update `getInvocationHandler` to throw 
> `InaccessibleInvocationHandlerException` if access denied to get an 
> invocation handler associated with the proxy instance
> 
> If this needs more time, I think I will consider to shelf this RFE and come 
> back to it later (and consider your proposal as well).

The trick is that if we know that a class like java.lang.invoke.Proxy may exist,
it means that instead of distorting the j.l.r.Proxy API to increase of few 
percents the performance when calling a default method, you can come with a 
simpler design in term of API that just add an API point to call a default 
method.

Better performance becoming on the the goals of java.lang.invoke.Proxy.

-------------

PR: https://git.openjdk.java.net/jdk/pull/313

Reply via email to