@@ -25,8 +25,13 @@ class ReadTastyTreesFromClasses extends FrontEnd {
2525 tree(className).flatMap {
2626 case (clsd, unpickled) =>
2727 if (unpickled.isEmpty) None
28- else Some (CompilationUnit .mkCompilationUnit(clsd, unpickled, forceTrees = true ))
29-
28+ else {
29+ val unit = CompilationUnit .mkCompilationUnit(clsd, unpickled, forceTrees = true )
30+ val cls = clsd.symbol.asClass
31+ unit.pickled += (cls -> cls.unpickler.unpickler.bytes)
32+ cls.unpickler = null
33+ Some (unit)
34+ }
3035 }
3136 }
3237 // The TASTY section in a/b/C.class may either contain a class a.b.C, an object a.b.C, or both.
@@ -41,12 +46,13 @@ class ReadTastyTreesFromClasses extends FrontEnd {
4146 val clsd = ctx.base.staticRef(className)
4247 ctx.base.staticRef(className) match {
4348 case clsd : ClassDenotation =>
49+ val cls = clsd.symbol.asClass
4450 def cannotUnpickle (reason : String ) =
4551 ctx.error(s " class $className cannot be unpickled because $reason" )
4652 def tryToLoad = clsd.infoOrCompleter match {
4753 case info : ClassfileLoader =>
4854 info.load(clsd)
49- Option (clsd.symbol.asClass .tree).orElse {
55+ Option (cls .tree).orElse {
5056 cannotUnpickle(s " its class file ${info.classfile} does not have a TASTY attribute " )
5157 None
5258 }
@@ -55,7 +61,7 @@ class ReadTastyTreesFromClasses extends FrontEnd {
5561 cannotUnpickle(s " its info of type ${info.getClass} is not a ClassfileLoader " )
5662 None
5763 }
58- Option (clsd.symbol.asClass .tree).orElse(tryToLoad).map(tree => (clsd, tree))
64+ Option (cls .tree).orElse(tryToLoad).map(tree => (clsd, tree))
5965
6066 case _ =>
6167 ctx.error(s " class not found: $className" )
0 commit comments