Skip to content

Commit b9f9260

Browse files
Use a TreeTraverser to check applied types
1 parent 5a23860 commit b9f9260

File tree

1 file changed

+13
-29
lines changed

1 file changed

+13
-29
lines changed

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

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
7171
override def run(using Context): Unit =
7272
val unit = ctx.compilationUnit
7373
if unit.isJava then
74-
checkAppliedTypes(unit.tpdTree)
74+
AppliedTypeChecker().traverse(unit.tpdTree)
7575
else
7676
super.run
7777

@@ -126,34 +126,18 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
126126
tree
127127
end normalizeTypeArgs
128128

129-
/** Scan a tree and check all the AppliedTypeTrees in it. */
130-
def checkAppliedTypes(tree: Tree)(using Context): Unit = tree match
131-
case tpt: TypeTree =>
132-
Checking.checkAppliedTypesIn(tpt)
133-
case tree: AppliedTypeTree =>
134-
Checking.checkAppliedType(tree, EmptyTree)
135-
case tree: TypeBoundsTree =>
136-
checkAppliedTypes(tree.hi)
137-
case tree: TypeApply =>
138-
val TypeApply(fn, args) = normalizeTypeArgs(tree)
139-
args.foreach(checkAppliedTypes)
140-
case tree: ValDef =>
141-
checkAppliedTypes(tree.tpt)
142-
case tree: DefDef =>
143-
checkAppliedTypes(tree.tpt)
144-
tree.vparamss.flatten.foreach(checkAppliedTypes)
145-
tree.tparams.foreach(checkAppliedTypes)
146-
case PackageDef(pid, stats) =>
147-
stats.foreach(checkAppliedTypes)
148-
case TypeDef(name, rhs) =>
149-
checkAppliedTypes(rhs)
150-
case t: Template =>
151-
t.parents.foreach(checkAppliedTypes)
152-
t.body.foreach(checkAppliedTypes)
153-
case a: Annotated =>
154-
checkAppliedTypes(a.arg)
155-
case _ =>
156-
// no need to check this
129+
private class AppliedTypeChecker extends TreeTraverser {
130+
/** Scan a tree and check all the AppliedTypeTrees in it. */
131+
def traverse(tree: Tree)(using Context): Unit = tree match
132+
case tpt: TypeTree =>
133+
Checking.checkAppliedTypesIn(tpt)
134+
case tree: AppliedTypeTree =>
135+
Checking.checkAppliedType(tree, EmptyTree)
136+
case tree: TypeApply =>
137+
traverseChildren(normalizeTypeArgs(tree))
138+
case _ =>
139+
traverseChildren(tree)
140+
}
157141

158142
class PostTyperTransformer extends Transformer {
159143

0 commit comments

Comments
 (0)