On Wed, 29 Oct 2025 14:49:57 GMT, Chen Liang <[email protected]> wrote:

>> ### Current Status
>> In core reflection, there are a few holes with the documentation on the type 
>> conversions performed on the different setters. They generally follow this 
>> process:
>> 
>> 1. The Object-valued setters checks the destination type. If that type is 
>> primitive, unbox the object.
>> 2. Perform identity or (primitive/reference, depending on destination type) 
>> widening conversions.
>> 
>> For each step, they can fail with IllegalArgumentException, which has been 
>> the long standing behavior.
>> 
>> Note that this process is more restrictive than the JLS 5.2 assignment 
>> context, which allows boxing conversions, while the primitive reflective 
>> setters consistently reject them.
>> 
>> ### Problems
>> There are some problems with current specs:
>> 1. No mention that boxing is never done for primitive-typed setters
>> 2. Array.set missing description for the final identity or widening 
>> conversion (reference or primitive) and the associated IAE condition
>> 3. Class specification of field mentions widening/narrowing conversion rules 
>> that is not sensible for get/set Object accessors
>> 4. Field.set misses the identity or widening in IAE clause (but mentioned in 
>> main body)
>> 5. Field primitive setters incorrectly claim they are equivalent to 
>> set(instance, wrapper) which is wrong due to lack of boxing conversion
>> 6. Field primitive setters refer to nonsense "unwrapping conversion"
>> 
>> ### Solutions
>> 1. Make sure the unbox -> identity/widen process and the IAE conditions are 
>> present in both Field and Array.set
>> 2. Add that boxing is absent for all primitive setters
>> 3. Update Field class spec to mention the narrowing/widening conversion 
>> limits are for primitive accessors only
>> 4. Fix the Field primitive setters' "unwrapping conversion" to be "identity 
>> or primitive widening conversion" as in Array primitive setters
>> 5. Qualify the Field primitive setters assertion with "if this field is of a 
>> primitive type" to make it correct
>
> Chen Liang has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   the narrowing conversion restriction is primitive-only

Thanks for the update, I think it looks good.

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

Marked as reviewed by alanb (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/28029#pullrequestreview-3400872398

Reply via email to