[lworld] setAccessible change and VarHandle test update

mandy chung mandy.chung at oracle.com
Thu Mar 22 23:57:05 UTC 2018

This is good.  Thanks.   Field::set throws IAE if it's a value type.  No 
change is needed in the implementation.  I have made minor change to 
Field::setAccessible to drop the final modifier change.


I finally got the chance to modify the VarHandleTestMethodHandleAccess* 
test.  Can you review this patch:


On 3/9/18 5:07 PM, John Rose wrote:
> I think the "final means final" discussion applies only to objects
> with identity and at least the potential of a changeable state
> A value has no identity, and no way to express a change in
> state.  Attempting to change the state of a value (e.g., by
> updating a field) must *always* result in a new value,
> not somehow "the old value but with a different value".
> Thus, Field.set is an impossible operation for a field of
> a value type.  Not an inaccessible or unsafe or unwise
> operation, an impossible one.
> (This is the deep reason we can and should move ourselves
> away from using "final" as a modifier for fields in value classes:
> The word "final" doesn't mean what you think it means there.
> It's not just that you are not allowed to assign to it; it is that
> it intrinsically cannot change without changing the enclosing
> value along with it.)
> A new operation Field.with or Field.update could make
> sense for values, but the access control rules for it are
> not yet clear.
> Bottom line:  Field.set must not "do something" on value class
> fields (fields of any type: ref/prim/val), under any circumstances
> (final or not, setAccessible or not).
> — John

More information about the valhalla-dev mailing list