diff options
Diffstat (limited to 'src/reflect/scala/reflect/internal/Trees.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Trees.scala | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala index ea7336340f..4bb88145b3 100644 --- a/src/reflect/scala/reflect/internal/Trees.scala +++ b/src/reflect/scala/reflect/internal/Trees.scala @@ -179,12 +179,9 @@ trait Trees extends api.Trees { self: SymbolTable => new ForeachPartialTreeTraverser(pf).traverse(this) } - def changeOwner(pairs: (Symbol, Symbol)*): Tree = - changeOwner(false, pairs: _*) - - def changeOwner(followModuleClass: Boolean, pairs: (Symbol, Symbol)*): Tree = { + def changeOwner(pairs: (Symbol, Symbol)*): Tree = { pairs.foldLeft(this) { case (t, (oldOwner, newOwner)) => - new ChangeOwnerTraverser(oldOwner, newOwner, followModuleClass) apply t + new ChangeOwnerTraverser(oldOwner, newOwner) apply t } } @@ -1313,29 +1310,27 @@ trait Trees extends api.Trees { self: SymbolTable => } } - class ChangeOwnerTraverser(val oldowner: Symbol, val newowner: Symbol, followModuleClass: Boolean = false) extends Traverser { - def changeSymboOwnerIfCorrect(sym: Symbol) = { + class ChangeOwnerTraverser(val oldowner: Symbol, val newowner: Symbol) extends Traverser { + final def change(sym: Symbol) = { if (sym != NoSymbol && sym.owner == oldowner) sym.owner = newowner } - def changeOwner(tree: Tree) = tree match { - case Return(expr) => - if (tree.symbol == oldowner) { - // SI-5612 - if (newowner hasTransOwner oldowner) - log("NOT changing owner of %s because %s is nested in %s".format(tree, newowner, oldowner)) - else { - log("changing owner of %s: %s => %s".format(tree, oldowner, newowner)) - tree.symbol = newowner - } - } - case _: DefTree | _: Function => - changeSymboOwnerIfCorrect(tree.symbol) - if (followModuleClass) changeSymboOwnerIfCorrect(tree.symbol.moduleClass) - case _ => - } override def traverse(tree: Tree) { - changeOwner(tree) + tree match { + case _: Return => + if (tree.symbol == oldowner) { + // SI-5612 + if (newowner hasTransOwner oldowner) + log("NOT changing owner of %s because %s is nested in %s".format(tree, newowner, oldowner)) + else { + log("changing owner of %s: %s => %s".format(tree, oldowner, newowner)) + tree.symbol = newowner + } + } + case _: DefTree | _: Function => + change(tree.symbol) + case _ => + } super.traverse(tree) } } |