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