On Sat, 18 May 2024 05:24:16 GMT, ExE Boss <d...@openjdk.org> wrote:

>> Core reflection's generic signature parsing uses an ancient library with 
>> outdated visitor pattern on a tree model and contains unnecessary 
>> boilerplates. This is a duplication of ClassFile API's signature model. We 
>> should just move to ClassFile API, which is more throughoutly tested as well.
>> 
>> To ensure compatibility, new tests are added to ensure consistent behavior 
>> when encountering malformed signatures or signatures with missing types. The 
>> reflective objects have been preserved and the only change is that lazy 
>> expansion now happens from CF objects, to reduce compatibility risks.
>
> src/java.base/share/classes/java/lang/Class.java line 3487:
> 
>> 3485: 
>> 3486:     // Generic info repository; lazily initialized
>> 3487:     private transient volatile @Stable ClassGenericInfo<T> genericInfo;
> 
> I don’t think this field can be `@Stable`, as generic signatures can change 
> when a class gets redefined by **JVM TI**, just like 
> [simple][Class​::getSimpleName()] and [canonical 
> names][Class​::getCanonicalName()].
> https://github.com/openjdk/jdk/blob/8acdd2d7c8de17515b87815d54ce556237039406/src/java.base/share/classes/java/lang/Class.java#L3452-L3454
> 
> [Class​::getSimpleName()]: 
> https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/Class.html#getSimpleName()
> [Class​::getCanonicalName()]: 
> https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/Class.html#getCanonicalName()

Existing genericInfo is not part of ReflectionData. The migration of 
genericInfo into reflectionData should be done in a separate task.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19281#discussion_r1605781541

Reply via email to