Skip to content

serialization is broken for inner enums #15396

Open
@bishabosha

Description

@bishabosha

Compiler version

3.1.2

Minimized code

class Foo extends Serializable {
  enum Bar {
    case A
  }
}

def serializeDeserialize[T <: AnyRef](obj: T): T = {
  import java.io.*
  val buffer = new ByteArrayOutputStream
  val out = new ObjectOutputStream(buffer)
  out.writeObject(obj)
  val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray))
  in.readObject.asInstanceOf[T]
}

def test =
  val foo = Foo()
  serializeDeserialize(foo.Bar) // runtime err here

Output

java.util.NoSuchElementException: 0
  at rs$line$16$Foo$Bar$.fromOrdinal(rs$line$16:3)
  at rs$line$16$$anon$1.readResolve(rs$line$16:3)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:568)
  at java.base/java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1321)
  at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2251)
  at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1742)
  at java.base/java.io.ObjectInputStream.readArray(ObjectInputStream.java:2142)
  at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1730)
  at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2584)
  at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2442)
  at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2242)
  at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1742)
  at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:514)
  at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:472)
  at rs$line$3$.serializeDeserialize(rs$line$3:7)
  ... 39 elided

Expectation

to return foo.Bar

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions