On Tue, 23 Apr 2024 12:22:25 GMT, Per Minborg <[email protected]> wrote:
>> src/java.base/share/classes/java/lang/reflect/AccessibleObject.java line 193:
>>
>>> 191: * <li>final fields declared in a {@linkplain Class#isHidden()
>>> hidden class}</li>
>>> 192: * <li>final fields declared in a {@linkplain Class#isRecord()
>>> record}</li>
>>> 193: * <li>final fields of type {@linkplain StableValue
>>> StableValue}</li>
>>
>> In Valhalla, we've been looking at adding "strict" final fields to support
>> value classes (which must be strongly immutable) which are fields that are
>> unmodifiable. Most of the existing unmodifiable field cases can be covered
>> by "strict" fields. This one can't though so I'm a little saddened to see
>> this list grow.
>
> Maybe we could introduce a special marker interface (e.g. `TrustedFieldType`)
> that signals this behavior. This might only take effect if loaded via the
> boot loader.
Thinking on this more, hidden classes & records & value classes can all be
dealt with by the introduction of strict fields. Adding a new type -
TrustedFieldType - when we'll eventually only have 1 type here - StableValue -
seems like an unnecessary tradeoff.
If we ever have to add a second type here, then it's probably worth revisiting
this idea.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18794#discussion_r1584921294