Review Request: JDK-8209005: Lookup.unreflectSpecial fails for default methods when Lookup.findSpecial works
Daniel Fuchs
daniel.fuchs at oracle.com
Wed Jul 31 10:15:08 UTC 2019
Hi Peter, Mandy,
On 31/07/2019 09:44, Peter Levart wrote:
> Expanding on this a little. The javadocs of MethodHandles.Lookup starts
> talking about the Lookup factory methods methods and their equivalence
> to bytecode instructions, but then present the equivalence between find*
> and Java source code (which is OK given that translation to bytecode is
> known) followed by equivalence between unreflect* and reflective
> invocations. Public reflection API does not implement the equivalent
> behavior to unreflectSpecial. So perhaps, this line only could present
> the equivalence in terms of Java code like findSpecial does with a
> comment stating that there's no equivalence with reflective invocation
> API. For example:
>
> * <tr>
> * <th scope="col"><a id="equiv"></a>lookup expression</th>
> * <th scope="col">member</th>
> * <th scope="col">bytecode / reflection behavior</th>
>
> Added "/ reflection" above; and:
>
> * <tr>
> * <th scope="row">{@link
> java.lang.invoke.MethodHandles.Lookup#unreflectSpecial
> lookup.unreflectSpecial(aMethod,this.class)}</th>
> * <td>{@code T m(A*);}</td><td>{@code (T) super.m(arg*); // no
> equivalent reflective invocation}</td>
> * </tr>
Yes - I would find this description better.
Additionally maybe it could say that the MH returned is
equivalent to that returned by `findSpecial(aMethod.getDeclaringClass(),
aMethod.getName(), MT, this.class)` - as there's no reflection equivalent?
>> On 7/30/19 4:47 PM, Mandy Chung wrote:
>>>
>>> Think about aMethod is a protected method inherited from its
>>> superclass T. To invoke aMethod, the receiver must be an instance of
>>> T or a subclass of T.
Ah - that's a very good explanation for the nature of the fix itself.
Thanks for that! But my comment was about virtual vs special invocation
as Peter noted.
best regards,
-- daniel
More information about the core-libs-dev
mailing list