RFR: 8254354: Add an asExact() VarHandle combinator [v3]

Jorn Vernee jvernee at openjdk.java.net
Fri Oct 23 23:54:51 UTC 2020


> 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

Jorn Vernee has updated the pull request incrementally with three additional commits since the last revision:

 - Fix whitespace
 - Comment out VarHandleGuards generator code
 - Makes exactness a property of a VarHandle, not a VarForm, since the latter are shared. Use handle.accessModeType to get the exact type of the VarHandle.

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/843/files
  - new: https://git.openjdk.java.net/jdk/pull/843/files/dc1f9ecf..be9e940d

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=843&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=843&range=01-02

  Stats: 410 lines in 11 files changed: 90 ins; 71 del; 249 mod
  Patch: https://git.openjdk.java.net/jdk/pull/843.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/843/head:pull/843

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


More information about the core-libs-dev mailing list