[9] RFR (S) 8050173: Generalize BMH.copyWith API to all method handles
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Fri Sep 5 13:15:47 UTC 2014
>> http://cr.openjdk.java.net/~vlivanov/8050173/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8050173
>>
>> Added j.l.i.MethodHandle.copyWith(MethodType, LambdaForm) and provided implementation for all subclasses.
>>
>> Also, some cleanups:
>> * rewrote MH.viewAsType on top of MH.copyWith;
>> * extended MH.viewAsType to do strict checks w/ assertions turned on (new parameter: boolean strict);
>> * extended MT.isViewableAs to accept both interface preserving and interface erasing conversions (new parameter: boolean keepInterfaces).
>>
>> Testing: jdk/java/lang/invoke, jdk/java/util/streams, nashorn, octane w/ "-ea -esa" and COMPILE_THRESHOLD={0,30}.
>>
>> Reviewed-by: vlivanov, ?
>> Contributed-by: john.r.rose at oracle.com
>>
>
> Looks good, just one comment.
>
> MethodHandles.restrictReceiver
>
> This method has:
>
> 1578 private MethodHandle restrictReceiver(MemberName method, MethodHandle mh, Class<?> caller) throws IllegalAccessException {
> ...
> 1589 assert(mh instanceof DirectMethodHandle); // DirectMethodHandle.copyWith
>
> Why not make the second parameter be "DirectMethodHandle mh" ?
Good point! While prototyping this I spotted uncovered corner case
(restrict a receiver on a MH with bound caller).
Updated webrev:
http://cr.openjdk.java.net/~vlivanov/8050173/webrev.01/
Diff:
http://cr.openjdk.java.net/~vlivanov/8050173/webrev.00.01/
Reordered restrictReceiver and maybeBindCaller operations.
Best regards,
Vladimir Ivanov
More information about the mlvm-dev
mailing list