On Mon, 26 Oct 2020 17:13:05 GMT, Rémi Forax <github.com+828220+fo...@openjdk.org> wrote:
>> We can clarify the new methods and tie them closer to method handle >> semantics. I suggest the names `asExactInvoker` and `asInvoker`, referencing >> `MethodHandles.exactInvoker` and `MethodHandles.invoker` respectively. (The >> term "generic" is really reserved for erased method types, and otherwise >> used internally as the generic invoker.) >> >> The `VarHandle` documentation already specifies that: >> >> * <p> >> * Invocation of an access mode method behaves as if an invocation of >> * {@link MethodHandle#invoke}, where the receiving method handle accepts the >> * VarHandle instance as the leading argument. More specifically, the >> * following, where {@code {access-mode}} corresponds to the access mode >> method >> * name: >> * <pre> {@code >> * VarHandle vh = .. >> * R r = (R) vh.{access-mode}(p1, p2, ..., pN); >> * }</pre> >> * behaves as if: >> * <pre> {@code >> * VarHandle vh = .. >> * VarHandle.AccessMode am = >> VarHandle.AccessMode.valueFromMethodName("{access-mode}"); >> * MethodHandle mh = MethodHandles.varHandleExactInvoker( >> * am, >> * vh.accessModeType(am)); >> * >> * R r = (R) mh.invoke(vh, p1, p2, ..., pN) >> * }</pre> >> * (modulo access mode methods do not declare throwing of {@code Throwable}). >> ... >> >> We will need to adjust this section, i can help, but first let us reach >> agreement on this approach. > > Paul, > an invoker has the MethodHandle (resp. VarHandle) as first argument so it's > not the same semantics. I've updated the implementation of accessModeType to work with the ordinal directly. Note that it was using the AccessType ordinal though, so I also had to change the parameter type of accessModeTypeUncached, and the respective implementations, to use AccessType directly (luckily this was possible, since the current implementations all just used the AccessType). ------------- PR: https://git.openjdk.java.net/jdk/pull/843