On Tue, 10 Nov 2020 15:02:08 GMT, Jorn Vernee <jver...@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: > > Re-order javadoc LGTM. The test could be sprinkled with a number of assertions related to the invocation behaviour, a.k.a `hasInvokeExactBehavior`; either the newly specified default behaviour assertFalse(vh. hasInvokeExactBehavior()), or post switching to exact: assertTrue(vh. hasInvokeExactBehavior()) test/jdk/java/lang/invoke/VarHandles/VarHandleTestExact.java line 82: > 80: throws NoSuchFieldException, IllegalAccessException { > 81: if (ro) throw new SkipException("Can not test setter with read > only field"); > 82: VarHandle vh = MethodHandles.lookup().findVarHandle(Widget.class, > fieldBaseName + "_RW", fieldType); Quite trivially we can assertFalse(vh. hasInvokeExactBehavior()) test/jdk/java/lang/invoke/VarHandles/VarHandleTestExact.java line 92: > 90: } > 91: > 92: vh = vh.withInvokeExactBehavior(); Quite trivially we can assertTrue(vh. hasInvokeExactBehavior()) ------------- Marked as reviewed by chegar (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/843