RFR: 8254354: Add a withInvokeExactBehavior() VarHandle combinator [v11]

Paul Sandoz psandoz at openjdk.java.net
Fri Oct 30 23:09:56 UTC 2020


On Fri, 30 Oct 2020 16:17:06 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> Hi,
>> 
>> This patch adds an asExact() combinator to VarHandle, that will return a new VarHandle that performs exact type checks, similar to MethodHandle::invokeExact, to help developers catch inexact VarHandle usage, which can lead to performance degradation.
>> 
>> This is implemented using a boolean flag in VarForm. If the flag is set, the exact type of the invocation is checked against the exact type in the VarForm. If there is a mismatch, a WrongMethodTypeException is thrown.
>> 
>> Other than that, there is also an asGeneric() combinator added that does the inverse operation (thanks to Rémi for the suggestion). I've also added The `@Hidden` annotation to the VarHandleGuards methods, as well as a type-checking helper method called from the generic invocation lambda form, so that the stack trace we get points at the location where the VarHandle is being used.
>> 
>> Thanks,
>> Jorn
>> 
>> CSR link: https://bugs.openjdk.java.net/browse/JDK-8255375
>
> Jorn Vernee has updated the pull request incrementally with one additional commit since the last revision:
> 
>   behaviour -> behavior in javadoc as well

src/java.base/share/classes/java/lang/invoke/VarHandle.java line 1601:

> 1599:      * @apiNote
> 1600:      * Invoke-exact behavior guarantees that that upon invocation of an access mode method
> 1601:      * the types an arity of the arguments must match the {@link #accessModeType(AccessMode) access mode type},

s/an arity/and arity/

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

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


More information about the core-libs-dev mailing list