-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Proxy-based serialization for all collections #6676
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
|
||
| protected def newCons[T](hd: => T, tl: => Stream[T]): Stream[T] = new Stream.Cons(hd, tl) | ||
|
|
||
| //@SerialVersionUID(1L) //TODO Putting an annotation on Stream.empty causes a cyclic dependency in unpickling |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's an example of an exception thrown by the compiler when you add the annotation:
java.lang.AssertionError: unsafe symbol Nothing (child of package scala) in runtime reflection universe
at scala.reflect.internal.Symbols$Symbol.<init>(Symbols.scala:224)
at scala.reflect.internal.Symbols$TypeSymbol.<init>(Symbols.scala:3053)
at scala.reflect.internal.Symbols$ClassSymbol.<init>(Symbols.scala:3244)
at scala.reflect.internal.Symbols$StubClassSymbol.<init>(Symbols.scala:3522)
at scala.reflect.internal.Symbols.newStubSymbol(Symbols.scala:208)
at scala.reflect.internal.Symbols.newStubSymbol$(Symbols.scala:204)
at scala.reflect.internal.SymbolTable.newStubSymbol(SymbolTable.scala:18)
at scala.reflect.internal.Symbols$Symbol.newStubSymbol(Symbols.scala:528)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readSymbol$6(UnPickler.scala:266)
at scala.reflect.internal.Symbols$Symbol.orElse(Symbols.scala:2552)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readSymbol$5(UnPickler.scala:253)
at scala.reflect.internal.Symbols$Symbol.orElse(Symbols.scala:2552)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readSymbol$4(UnPickler.scala:253)
at scala.reflect.internal.Symbols$Symbol.orElse(Symbols.scala:2552)
at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:251)
at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:274)
at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:639)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:406)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readTypeRef$1(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$1(UnPickler.scala:368)
at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:154)
at scala.reflect.internal.pickling.UnPickler$Scan.all$1(UnPickler.scala:366)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypes$1(UnPickler.scala:368)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:406)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readTypeRef$1(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$1(UnPickler.scala:368)
at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:154)
at scala.reflect.internal.pickling.UnPickler$Scan.all$1(UnPickler.scala:366)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypes$1(UnPickler.scala:368)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:408)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.$anonfun$completeInternal$1(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.completeInternal(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:743)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:176)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:176)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.info(SynchronizedSymbols.scala:176)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1682)
at scala.reflect.internal.Symbols$Symbol.annotations(Symbols.scala:1852)
at scala.reflect.internal.Symbols$Symbol.addAnnotation(Symbols.scala:1871)
at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolAnnotation(UnPickler.scala:505)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$run$2(UnPickler.scala:101)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.pickling.UnPickler$Scan.runAtIndex(UnPickler.scala:83)
at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:101)
at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:40)
at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:621)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.$anonfun$complete$2(SymbolLoaders.scala:25)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:22)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.info(SynchronizedSymbols.scala:191)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1682)
at scala.reflect.internal.Symbols$Symbol.hasFlag(Symbols.scala:742)
at scala.reflect.internal.HasFlags.isMutable(HasFlags.scala:108)
at scala.reflect.internal.HasFlags.isMutable$(HasFlags.scala:108)
at scala.reflect.internal.Symbols$Symbol.isMutable(Symbols.scala:214)
at scala.reflect.internal.Symbols$Symbol.isStable(Symbols.scala:953)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$4(UnPickler.scala:403)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$4$adapted(UnPickler.scala:403)
at scala.reflect.internal.Symbols$Symbol.filter(Symbols.scala:1968)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:403)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readTypeRef$1(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:410)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.$anonfun$completeInternal$1(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.completeInternal(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:743)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:188)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:188)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.info(SynchronizedSymbols.scala:188)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1682)
at scala.reflect.internal.Symbols$Symbol.annotations(Symbols.scala:1852)
at scala.reflect.internal.Symbols$Symbol.addAnnotation(Symbols.scala:1871)
at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolAnnotation(UnPickler.scala:505)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$run$2(UnPickler.scala:101)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.pickling.UnPickler$Scan.runAtIndex(UnPickler.scala:83)
at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:101)
at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:40)
at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:621)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.$anonfun$complete$2(SymbolLoaders.scala:25)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:22)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.info(SynchronizedSymbols.scala:191)
at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:336)
at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:391)
at scala.reflect.runtime.SymbolLoaders$LazyPackageType.$anonfun$complete$3(SymbolLoaders.scala:71)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$LazyPackageType.complete(SymbolLoaders.scala:68)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:179)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:179)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtim[info] Test scala.OptionTest.testNoneZipNil startede.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.info(SynchronizedSymbols.scala:179)
at scala.reflect.internal.Types$TypeRef.baseClasses(Types.scala:2383)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.<init>(FindMembers.scala:17)
at scala.reflect.internal.tpe.FindMembers$FindMember.<init>(FindMembers.scala:219)
at scala.reflect.internal.Types$Type.findMemberInternal$1(Types.scala:1032)
at scala.reflect.internal.Types$Type.findMember(Types.scala:1034)
at scala.reflect.internal.Types$Type.memberBasedOnName(Types.scala:660)
at scala.reflect.internal.Types$Type.member(Types.scala:624)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage$lzycompute(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass$lzycompute(Definitions.scala:171)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass(Definitions.scala:171)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr$lzycompute(Definitions.scala:1206)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:1205)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1335)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1334)
at scala.reflect.internal.Mirrors$RootsBase.init(Mirrors.scala:232)
at scala.reflect.runtime.JavaMirrors.createMirror(JavaMirrors.scala:34)
at scala.reflect.runtime.JavaMirrors.$anonfun$runtimeMirror$1(JavaMirrors.scala:51)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.JavaMirrors.runtimeMirror(JavaMirrors.scala:49)
at scala.reflect.runtime.JavaMirrors.runtimeMirror$(JavaMirrors.scala:48)
at scala.reflect.runtime.JavaUniverse.runtimeMirror(JavaUniverse.scala:18)
at scala.reflect.runtime.JavaMirrors$JavaMirror.mirrorDefining(JavaMirrors.scala:568)
at scala.reflect.runtime.SymbolLoaders$PackageScope.$anonfun$lookupEntry$1(SymbolLoaders.scala:136)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SymbolLoaders$PackageScope.syncLockSynchronized(SymbolLoaders.scala:121)
at scala.reflect.runtime.SymbolLoaders$PackageScope.lookupEntry(SymbolLoaders.scala:123)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.walkBaseClasses(FindMembers.scala:88)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.searchConcreteThenDeferred(FindMembers.scala:56)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.apply(FindMembers.scala:48)
at scala.reflect.internal.Types$Type.findMemberInternal$1(Types.scala:1032)
at scala.reflect.internal.Types$Type.findMember(Types.scala:1034)
at scala.reflect.internal.Types$Type.memberBasedOnName(Types.scala:660)
at scala.reflect.internal.Types$Type.member(Types.scala:624)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getClassByName(Mirrors.scala:101)
at scala.reflect.internal.Mirrors$RootsBase.getRequiredClass(Mirrors.scala:104)
at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass$lzycompute(Definitions.scala:266)
at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass(Definitions.scala:266)
at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1431)
at scala.reflect.runtime.JavaUniverse.init(JavaUniverse.scala:142)
at scala.reflect.runtime.JavaUniverse.<init>(JavaUniverse.scala:81)
at scala.reflect.runtime.package$.universe$lzycompute(package.scala:17)
at scala.reflect.runtime.package$.universe(package.scala:17)
at scala.tools.testing.Runner$.make(RunTesting.scala:16)
at scala.tools.testing.RunTesting.$anonfun$runner$1(RunTesting.scala:8)
at scala.tools.testing.ClearAfterClass.lambda$cached$1(ClearAfterClass.java:51)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at scala.tools.testing.ClearAfterClass.cached(ClearAfterClass.java:51)
at scala.tools.testing.RunTesting.$init$(RunTesting.scala:8)
at scala.OptionTest.<init>(OptionTest.scala:8)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at scala.tools.testing.ClearAfterClass$1.evaluate(ClearAfterClass.java:29)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:132)
at sbt.ForkMain$Run$2.call(ForkMain.java:296)
at sbt.ForkMain$Run$2.call(ForkMain.java:286)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
java.lang.RuntimeException: error reading Scala signature of scala.collection.immutable.Stream: unsafe symbol Nothing (child of package scala) in runtime reflection universe
at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:44)
at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:621)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.$anonfun$complete$2(SymbolLoaders.scala:25)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:22)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.info(SynchronizedSymbols.scala:191)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1682)
at scala.reflect.internal.Symbols$Symbol.hasFlag(Symbols.scala:742)
at scala.reflect.internal.HasFlags.isMutable(HasFlags.scala:108)
at scala.reflect.internal.HasFlags.isMutable$(HasFlags.scala:108)
at scala.reflect.internal.Symbols$Symbol.isMutable(Symbols.scala:214)
at scala.reflect.internal.Symbols$Symbol.isStable(Symbols.scala:953)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$4(UnPickler.scala:403)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readType$4$adapted(UnPickler.scala:403)
at scala.reflect.internal.Symbols$Symbol.filter(Symbols.scala:1968)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:403)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$readTypeRef$1(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:648)
at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:410)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.$anonfun$completeInternal$1(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:183)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.completeInternal(UnPickler.scala:716)
at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:743)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:188)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:188)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.info(SynchronizedSymbols.scala:188)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1682)
at scala.reflect.internal.Symbols$Symbol.annotations(Symbols.scala:1852)
at scala.reflect.internal.Symbols$Symbol.addAnnotation(Symbols.scala:1871)
at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolAnnotation(UnPickler.scala:505)
at scala.reflect.internal.pickling.UnPickler$Scan.$anonfun$run$2(UnPickler.scala:101)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.pickling.UnPickler$Scan.runAtIndex(UnPickler.scala:83)
at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:101)
at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:40)
at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:621)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.$anonfun$complete$2(SymbolLoaders.scala:25)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:22)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:191)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$9.info(SynchronizedSymbols.scala:191)
at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:336)
at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:391)
at scala.reflect.runtime.SymbolLoaders$LazyPackageType.$anonfun$complete$3(SymbolLoaders.scala:71)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:313)
at scala.reflect.runtime.SymbolLoaders$LazyPackageType.complete(SymbolLoaders.scala:68)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:179)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.$anonfun$info$1(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:125)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.gilSynchronizedIfNotThreadsafe$(SynchronizedSymbols.scala:121)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:179)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol.info$(SynchronizedSymbols.scala:129)
at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$1.info(SynchronizedSymbols.scala:179)
at scala.reflect.internal.Types$TypeRef.baseClasses(Types.scala:2383)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.<init>(FindMembers.scala:17)
at scala.reflect.internal.tpe.FindMembers$FindMember.<init>(FindMembers.scala:219)
at scala.reflect.internal.Types$Type.findMemberInternal$1(Types.scala:1032)
at scala.reflect.internal.Types$Type.findMember(Types.scala:1034)
at scala.reflect.internal.Types$Type.memberBasedOnName(Types.scala:660)
at scala.reflect.internal.Types$Type.member(Types.scala:624)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage$lzycompute(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass$lzycompute(Definitions.scala:171)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass(Definitions.scala:171)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr$lzycompute(Definitions.scala:1206)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:1205)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1335)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1334)
at scala.reflect.internal.Mirrors$RootsBase.init(Mirrors.scala:232)
at scala.reflect.runtime.JavaMirrors.createMirror(JavaMirrors.scala:34)
at scala.reflect.runtime.JavaMirrors.$anonfun$runtimeMirror$1(JavaMirrors.scala:51)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.JavaMirrors.runtimeMirror(JavaMirrors.scala:49)
at scala.reflect.runtime.JavaMirrors.runtimeMirror$(JavaMirrors.scala:48)
at scala.reflect.runtime.JavaUniverse.runtimeMirror(JavaUniverse.scala:18)
at scala.reflect.runtime.JavaMirrors$JavaMirror.mirrorDefining(JavaMirrors.scala:568)
at scala.reflect.runtime.SymbolLoaders$PackageScope.$anonfun$lookupEntry$1(SymbolLoaders.scala:136)
at scala.reflect.runtime.Gil.gilSynchronized(Gil.scala:19)
at scala.reflect.runtime.Gil.gilSynchronized$(Gil.scala:14)
at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:18)
at scala.reflect.runtime.SymbolLoaders$PackageScope.syncLockSynchronized(SymbolLoaders.scala:121)
at scala.reflect.runtime.SymbolLoaders$PackageScope.lookupEntry(SymbolLoaders.scala:123)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.walkBaseClasses(FindMembers.scala:88)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.searchConcreteThenDeferred(FindMembers.scala:56)
at scala.reflect.internal.tpe.FindMembers$FindMemberBase.apply(FindMembers.scala:48)
at scala.reflect.internal.Types$Type.findMemberInternal$1(Types.scala:1032)
at scala.reflect.internal.Types$Type.findMember(Types.scala:1034)
at scala.reflect.internal.Types$Type.memberBasedOnName(Types.scala:660)
at scala.reflect.internal.Types$Type.member(Types.scala:624)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getClassByName(Mirrors.scala:101)
at scala.reflect.internal.Mirrors$RootsBase.getRequiredClass(Mirrors.scala:104)
at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass$lzycompute(Definitions.scala:266)
at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass(Definitions.scala:266)
at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1431)
at scala.reflect.runtime.JavaUniverse.init(JavaUniverse.scala:142)
at scala.reflect.runtime.JavaUniverse.<init>(JavaUniverse.scala:81)
at scala.reflect.runtime.package$.universe$lzycompute(package.scala:17)
at scala.reflect.runtime.package$.universe(package.scala:17)
at scala.tools.testing.Runner$.make(RunTesting.scala:16)
at scala.tools.testing.RunTesting.$anonfun$runner$1(RunTesting.scala:8)
at scala.tools.testing.ClearAfterClass.lambda$cached$1(ClearAfterClass.java:51)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at scala.tools.testing.ClearAfterClass.cached(ClearAfterClass.java:51)
at scala.tools.testing.RunTesting.$init$(RunTesting.scala:8)
at scala.OptionTest.<init>(OptionTest.scala:8)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at scala.tools.testing.ClearAfterClass$1.evaluate(ClearAfterClass.java:29)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:132)
at sbt.ForkMain$Run$2.call(ForkMain.java:296)
at sbt.ForkMain$Run$2.call(ForkMain.java:286)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That problem might be limited to runtime reflection. Still needs investigation of course.
| def run: Unit = { | ||
| serialize(new B()) | ||
| /* This is no longer possible with the proxy-based serialization for collections: */ | ||
| //serialize(new B()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've given up on playing whack-a-mole with Enumeration. If anyone else has an idea, have a go at it. The cyclic dependency problem with deserialized collections is not entirely new. List already used the serialization proxy pattern, so any List-based code was affected. Now we have more instances because most other collection types (in particular for this case, the default Set implementation) do the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Really nice!!!
A few comments
- There are some redundant
extends Serializableleft (e.g.,immutable.ArraySeq.ofX,mutable.ArraySeq) - There are some self-serializing classes without
@SVUIDannotation (e.g.,immutable.ArraySeq,RangeIterator) - For classes using self-serialization, we need to make sure that all parent classes have an
@SVUIDannotation.- For example,
AbstractIterable,AbstractSeq
- For example,
- There are
@SVUIDannotations left on classes that use the serialization proxy (e.g.,List). Should we remove them? - Should we use
3Lfor the SVUID uniformly? See scala/collection-strawman#418.
I'll try to fix the issue in reflection when annotation Stream.Empty.
| * extending this class. | ||
| */ | ||
| @SerialVersionUID(1L) | ||
| class DefaultSerializationProxy[A](val factory: Factory[A, Any], @transient protected val coll: Iterable[A]) extends Serializable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this class be final? Then we could also simplify the scaladoc comment above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It makes sense to subclass it in order to store additional data that is used in readResolve. You only need to put that data into the factory if you need it to create the Builder.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't have any such case in the standard library though. It's not really how Builders are used. Making it final would not be big restriction.
| } | ||
|
|
||
| @SerialVersionUID(1L) | ||
| private[collection] final case object SerializeEnd |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
redundant final
|
@szeiger Anybody still use Java-serialization? Instead, I would add a package viewability to all collection internals and provide efficient type-classes for the most popular binary serializers in the separated projects and jars. |
- Provide a `DefaultSerializationProxy` for all collection kinds. - Remove `List.SerializationProxy` (the new default proxy is equally good for `List`). - Remove unnecessary `SerialVersionUID` annotations and `Serializable` mix-ins: All collections are `Serializable` (via `Iterable`) and use a serialization proxy by default. - Add missing `toFactory` and `toBuildFrom` conversion to some non-standard factory objects (e.g. `IntMap`). `toFactory` is needed for `DefaultSerializationProxy`. - Re-enable self-serialization (not using the default proxy) for `Range`, `NumericRange`, `View`, `StringBuilder` and both `ArraySeq`s. - Re-enable self-serialization for `Enumeration.ValueSet` to avoid some cyclic dependencies during deserialization which can make proxies leak and cause a `ClassCastException`. I was unable to come up with a solution to all such problems (see `run/enums.scala`). - Use an `Array` instead of a `Seq` in `Manifest.IntersectionTypeManifest` to avoid cyclic dependencies during deserialization. - Add a custom proxy to `BitSet` for compact serialization of the internal structure. - Add a custom proxy for mixed strict and lazy serialization of `LazyList` and `Stream`. A forced init is stored sequentially to prevent stack overflows, the unevaluated tail is serialized in structural form to preserve laziness. - Make iterators of `IndexedSeqView`, `Range` and `NumericRange` serializable.
e396aac to
5d56f69
Compare
|
Addressed the review comments, in particular:
|
|
@plokhotnyuk Java serialization is certainly still used, so we need to support it. That doesn't exclude other serialization frameworks of course. |
|
Merging this now, I'll look into the unpickler crash. |
|
Diagnosis of the reflection issue: scala/bug#10903 |
Provide a
DefaultSerializationProxyfor all collection kinds.Remove
List.SerializationProxy(the new default proxy is equallygood for
List).Remove unnecessary
SerialVersionUIDannotations andSerializablemix-ins: All collections are
Serializable(viaIterable) anduse a serialization proxy by default.
Add missing
toFactoryandtoBuildFromconversion to somenon-standard factory objects (e.g.
IntMap).toFactoryis neededfor
DefaultSerializationProxy.Re-enable self-serialization (not using the default proxy) for
Range,NumericRange,View,StringBuilderand bothArraySeqs.Re-enable self-serialization for
Enumeration.ValueSetto avoid somecyclic dependencies during deserialization which can make proxies
leak and cause a
ClassCastException. I was unable to come up with asolution to all such problems (see
run/enums.scala).Use an
Arrayinstead of aSeqinManifest.IntersectionTypeManifestto avoid cyclic dependenciesduring deserialization.
Add a custom proxy to
BitSetfor compact serialization of theinternal structure.
Add a custom proxy for mixed strict and lazy serialization of
LazyListandStream. A forced init is stored sequentially toprevent stack overflows, the unevaluated tail is serialized in
structural form to preserve laziness.
Make iterators of
IndexedSeqView,RangeandNumericRangeserializable.
Fixes scala/collection-strawman#523.
Fixes scala/collection-strawman#524.
Fixes scala/bug#7005.
Fixes scala/bug#6654.
Fixes scala/collection-strawman#541.
Fixes scala/bug#10679.
Fixes scala/collection-strawman#331.
Now I need to get a belt that reads "Seven at One Blow".