Skip to content

Commit b742053

Browse files
committed
Traverse only non-local definitions in SetRootTree
1 parent 619b4c5 commit b742053

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

compiler/src/dotty/tools/dotc/transform/SetRootTree.scala

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,25 @@ class SetRootTree extends Phase {
1919

2020
private def traverser = new tpd.TreeTraverser {
2121
override def traverse(tree: tpd.Tree)(implicit ctx: Context): Unit = {
22-
if (tree.isInstanceOf[tpd.TypeDef] && tree.symbol.isClass) {
23-
val sym = tree.symbol.asClass
24-
tpd.sliceTopLevel(ctx.compilationUnit.tpdTree, sym) match {
25-
case (pkg: tpd.PackageDef) :: Nil =>
26-
sym.rootTreeOrProvider = pkg
27-
case _ =>
28-
sym.rootTreeOrProvider = tree
29-
}
22+
tree match {
23+
case pkg: tpd.PackageDef =>
24+
traverseChildren(pkg)
25+
case td: tpd.TypeDef =>
26+
if (td.symbol.isClass) {
27+
val sym = td.symbol.asClass
28+
tpd.sliceTopLevel(ctx.compilationUnit.tpdTree, sym) match {
29+
case (pkg: tpd.PackageDef) :: Nil =>
30+
sym.rootTreeOrProvider = pkg
31+
case _ =>
32+
sym.rootTreeOrProvider = td
33+
}
34+
}
35+
traverseChildren(td)
36+
case tpl: tpd.Template =>
37+
traverseChildren(tpl)
38+
case _ =>
39+
()
3040
}
31-
traverseChildren(tree)
3241
}
3342
}
3443
}

0 commit comments

Comments
 (0)