@@ -5,13 +5,11 @@ import dotty.tools.dotc.core.Contexts._
55import dotty .tools .dotc .core .DenotTransformers .InfoTransformer
66import dotty .tools .dotc .core .Flags ._
77import dotty .tools .dotc .core .Symbols ._
8+ import dotty .tools .dotc .core .Phases .Phase
89import dotty .tools .dotc .core .Types ._
910import dotty .tools .dotc .transform .TreeTransforms .{MiniPhaseTransform , TransformerInfo }
1011
1112/** This phase removes unused declarations of `def`s and `val`s (except for parameters).
12- * It assumes that:
13- * - Unused defs and vals are not used
14- * - There are no unused parameter declarations
1513 *
1614 * `unused def f(...) = ...` and `unused val x = ...` are removed
1715 */
@@ -20,9 +18,8 @@ class UnusedDecls extends MiniPhaseTransform with InfoTransformer {
2018
2119 override def phaseName : String = " unusedDecls"
2220
23- override def runsAfterGroupsOf = Set (
24- classOf [UnusedParams ], // ensure no unused parameters declarations
25- classOf [UnusedRefs ] // ensures declarations are not used
21+ override def runsAfterGroupsOf : Set [Class [_ <: Phase ]] = Set (
22+ classOf [PatternMatcher ] // Make sure pattern match errors are emitted
2623 )
2724
2825 /** Check what the phase achieves, to be called at any point after it is finished. */
@@ -34,13 +31,11 @@ class UnusedDecls extends MiniPhaseTransform with InfoTransformer {
3431
3532 /* Tree transform */
3633
37- override def transformDefDef (tree : DefDef )(implicit ctx : Context , info : TransformerInfo ): Tree =
38- if (tree.symbol.is(Unused )) EmptyTree
39- else tree
34+ override def transformDefDef (tree : DefDef )(implicit ctx : Context , info : TransformerInfo ): Tree = transformValOrDefDef(tree)
35+ override def transformValDef (tree : ValDef )(implicit ctx : Context , info : TransformerInfo ): Tree = transformValOrDefDef(tree)
4036
41- override def transformValDef (tree : ValDef )(implicit ctx : Context , info : TransformerInfo ): Tree =
42- if (tree.symbol.is(Unused )) EmptyTree
43- else tree
37+ private def transformValOrDefDef (tree : ValOrDefDef )(implicit ctx : Context ): Tree =
38+ if (tree.symbol is Unused ) EmptyTree else tree
4439
4540
4641 /* Info transform */
0 commit comments