RFR (XS): 8148044: Remove Enum[0] constants from EnumSet and EnumMap

Claes Redestad claes.redestad at oracle.com
Fri Jan 22 12:07:29 UTC 2016



On 2016-01-22 12:56, Claes Redestad wrote:
>
>
> On 2016-01-22 12:53, Alan Bateman wrote:
>>
>>
>> On 22/01/2016 11:34, Claes Redestad wrote:
>>> :
>>>
>>> During testing I discovered that EnumSet was missing a 
>>> serialVersionUID, which needs to be added. 
>> I assume this is not needed, it already has:
>>
>> @SuppressWarnings("serial") // No serialVersionUID due to usage of 
>> serial proxy pattern
>
> That's odd.. there's a jtreg test that fails if I don't explicitly add 
> the serialVersionUID (that's where I got the actual UID from). I'll 
> investigate.

Right...  java/util/EnumSet/BogusEnumSet.java fails, which is an 
explicit test to verify a corrupt EnumSet doesn't deserialize properly:

java.io.InvalidClassException: java.util.EnumSet; local class incompatible: stream classdesc serialVersionUID = 1009687484059888093, local class serialVersionUID = 4168005130090799668
	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:618)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1626)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1626)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
	at BogusEnumSet.deserialize(BogusEnumSet.java:91)
	at BogusEnumSet.main(BogusEnumSet.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:520)
	at com.sun.javatest.regtest.agent.MainActionHelper$SameVMRunnable.run(MainActionHelper.java:218)
	at java.lang.Thread.run(Thread.java:804)


It would seem the assessment that serialVersionUID is not needed when 
using the serial proxy pattern might be misguided (or is this a bug in 
ObjectInputStream)?

Thanks!

/Claes



More information about the core-libs-dev mailing list