> 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 with a new target base due to a merge 
or a rebase. The incremental webrev excludes the unrelated changes brought in 
by the merge/rebase. The pull request contains 17 additional commits since the 
last revision:

 - Merge branch 'master' into Exact_VarHandle
 - Address review comments:
   - Fix typo
   - add specification about return value of hasInvokeExactBehaviour
 - s/an arity/and arity
 - behaviour -> behavior in javadoc as well
 - - behaviour -> behaviour
   - Return same VarHandle instance when instance is already exact/non-exact
 - Update Javadoc, and rename asExact and asGeneric to withInvokeExactBehaviour 
and withInvokeBehaviour
 - Merge branch 'master' into Exact_VarHandle
 - Use AccessType ordinal in guard checks instead of the AccessMode ordinal
 - Update accessModeType to use the AccessType ordinal directly.
 - Add benchmarks
 - ... and 7 more: https://git.openjdk.java.net/jdk/compare/b6a085d4...ea7c920c

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

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

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

  Stats: 15154 lines in 825 files changed: 8417 ins; 4076 del; 2661 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

Reply via email to