diff options
author | Hubert Plociniczak <hubert.plociniczak@gmail.com> | 2012-09-27 11:33:32 +0200 |
---|---|---|
committer | Hubert Plociniczak <hubert.plociniczak@gmail.com> | 2012-10-09 21:49:41 +0200 |
commit | a15969a6963a896fa3a4aa43effaf625833e363d (patch) | |
tree | 28a3ff68beef43903cfb5df9938e75702369d5ed /src/reflect/scala/reflect/internal/Trees.scala | |
parent | 63c90af33290c2df38e70982c8c0151df1b106a9 (diff) | |
download | scala-a15969a6963a896fa3a4aa43effaf625833e363d.tar.gz scala-a15969a6963a896fa3a4aa43effaf625833e363d.tar.bz2 scala-a15969a6963a896fa3a4aa43effaf625833e363d.zip |
Incorporated changes suggested in code review
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) } } |