@@ -61,7 +61,7 @@ object PickledQuotes {
6161 val unpickled = unpickle(tastyBytes, expr.args)
6262 unpickled match {
6363 case PackageDef (_, (vdef : ValDef ) :: Nil ) =>
64- changeQuoteOwners(vdef.rhs, nested)
64+ changeQuoteOwners(vdef.rhs, vdef.symbol, nested)
6565 }
6666 }
6767
@@ -71,23 +71,18 @@ object PickledQuotes {
7171 val unpickled = unpickle(tastyBytes, ttpe.args)
7272 unpickled match {
7373 case PackageDef (_, (vdef : ValDef ) :: Nil ) =>
74- changeQuoteOwners(vdef.rhs.asInstanceOf [TypeApply ].args.head, nested)
74+ changeQuoteOwners(vdef.rhs.asInstanceOf [TypeApply ].args.head, vdef.symbol, nested)
7575 }
7676 }
7777
78- private def changeQuoteOwners (tree : Tree , nested : Boolean )(implicit ctx : Context ): Tree = {
78+ private [this ] val ownerMapping = scala.collection.mutable.LinkedHashMap .empty[Symbol , Symbol ]
79+ private def changeQuoteOwners (tree : Tree , owner : Symbol , nested : Boolean )(implicit ctx : Context ): Tree = {
80+ ownerMapping.put(owner, ctx.owner)
7981 if (nested) tree
8082 else {
81- val set = mutable.HashSet .empty[Symbol ]
82- new TreeTraverser {
83- override def traverse (tree : tpd.Tree )(implicit ctx : Context ): Unit = {
84- if (tree.symbol.exists && tree.symbol.owner.name == " $quote" .toTermName)
85- set += tree.symbol.owner
86- traverseChildren(tree)
87- }
88- }.traverse(tree)
89- val owners = set.toList
90- new TreeTypeMap (oldOwners = owners, newOwners = owners.map(_ => ctx.owner)).apply(tree)
83+ val (oldOwners, newOwners) = ownerMapping.iterator.toList.unzip
84+ ownerMapping.clear()
85+ new TreeTypeMap (oldOwners = oldOwners, newOwners = newOwners).apply(tree)
9186 }
9287 }
9388
0 commit comments