On Wed, 6 Sep 2023 19:31:22 GMT, ExE Boss <d...@openjdk.org> wrote:

>> This reimplements 
>> `sun.reflect.ReflectionFactory::newConstructorForSerialization` with method 
>> handles.
>> 
>> This API currently generates the bytecode which fails the verification 
>> because `new C; invokespecial A()` where the given class `C` and invoke a 
>> no-arg constructor of `C`'s first non-`Serializable` superclass `A` is not a 
>> valid operation per the VM specification. VM special cases the classes 
>> generated for reflection to skip verification for the constructors generated 
>> for serialization and externalization.  This change will allow such VM hack 
>> to be removed.
>> 
>> A `jdk.reflect.useOldSerializableConstructor` system property can be set to 
>> use the old implementation in case if customers run into any compatibility 
>> issue.   I expect this change has very low compatibility risk.   This system 
>> property is undocumented and will be removed in a future release.
>
> src/java.base/share/classes/java/lang/invoke/MethodHandles.java line 3534:
> 
>> 3532:          * This method is only used to implement the unsupported
>> 3533:          * 
>> sun.reflect.ReflectionFactory::newConstructorForSerialization API.
>> 3534:          */
> 
> The following is probably more correct:
> Suggestion:
> 
>         /**
>          * Produces a method handle that is capable of creating instances of 
> the given class
>          * and instantiated by the given constructor.  No security manager 
> check.
>          *
>          * This method is used to implement serialization and the unsupported
>          * sun.reflect.ReflectionFactory::newConstructorForSerialization API.
>          */

What are you referring to "to implement serialization"?   It's only used by 
ReflectionFactory.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/15600#discussion_r1317750757

Reply via email to