RFR: 8313961: Enhance identification of special serialization methods [v2]
Joe Darcy
darcy at openjdk.org
Tue Aug 22 19:14:18 UTC 2023
On Mon, 21 Aug 2023 16:57:57 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:
>> src/java.base/share/classes/java/io/ObjectStreamClass.java line 1670:
>>
>>> 1668: ObjectStreamField[] serialPersistentFields = null;
>>> 1669: try {
>>> 1670: Field f = getDeclaredField(cl, ObjectStreamField[].class, "serialPersistentFields");
>>
>> This can technically be a breaking change, as it was supported for the field to have a declared type that is assignable from `ObjectStreamField[]`, as long as it held an `ObjectStreamField[]` instance at runtime, even if it wasn’t officially supported.
>>
>>
>> class Example implements Serializable {
>> // This used to work before this patch in OpenJDK
>> private static final Object serialPersistentFields = new ObjectStreamField[] {
>> // ...
>> };
>>
>> // ...
>> }
>
> True.
>
> On the other hand, what about a .class file that includes all of (pseudo-Java)
>
>
> private static final Object serialPersistentFields = new ObjectStreamField[0];
> private static final Cloneable serialPersistentFields = new ObjectStreamField[0];
> private static final Serializable serialPersistentFields = new ObjectStreamField[0];
> private static final ObjectStreamField[] serialPersistentFields = new SubclassOfObjectStreamField[0];
>
>
> Which one is the "preferred" field?
>
> Perhaps the Java Object Serialization Specification should simply prohibit multiple `serialPersistentFields`.
> This can technically be a breaking change, as it was supported for the field to have a declared type that is assignable from `ObjectStreamField[]`, as long as it held an `ObjectStreamField[]` instance at runtime, even if it wasn’t officially supported.
>
> ```java
> class Example implements Serializable {
> // This used to work before this patch in OpenJDK
> private static final Object serialPersistentFields = new ObjectStreamField[] {
> // ...
> };
>
> // ...
> }
> ```
That sort of behavior change would require a CSR; marking the PR accordingly.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/15364#discussion_r1302070033
More information about the build-dev
mailing list