@@ -159,9 +159,7 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
159
159
override def prepareForValDef (tree : ValDef )(using Context ): Context =
160
160
if ! tree.symbol.is(Deferred ) && tree.rhs.symbol != defn.Predef_undefined then
161
161
refInfos.register(tree)
162
- tree.tpt match
163
- case RefinedTypeTree (_, refinements) => relax(tree.rhs, refinements)
164
- case _ =>
162
+ relax(tree.rhs, tree.tpt.tpe)
165
163
ctx
166
164
override def transformValDef (tree : ValDef )(using Context ): tree.type =
167
165
traverseAnnotations(tree.symbol)
@@ -183,9 +181,7 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
183
181
refInfos.inliners += 1
184
182
else if ! tree.symbol.is(Deferred ) && tree.rhs.symbol != defn.Predef_undefined then
185
183
refInfos.register(tree)
186
- tree.tpt match
187
- case RefinedTypeTree (_, refinements) => relax(tree.rhs, refinements)
188
- case _ =>
184
+ relax(tree.rhs, tree.tpt.tpe)
189
185
ctx
190
186
override def transformDefDef (tree : DefDef )(using Context ): tree.type =
191
187
traverseAnnotations(tree.symbol)
@@ -902,15 +898,21 @@ object CheckUnused:
902
898
case tree => traverseChildren(tree)
903
899
904
900
// NoWarn members in tree that correspond to refinements; currently uses only names.
905
- def relax (tree : Tree , refinements : List [Tree ])(using Context ): Unit =
906
- val names = refinements.collect { case named : NamedDefTree => named.name }.toSet
907
- val relaxer = new TreeTraverser :
908
- def traverse (tree : Tree )(using Context ) =
909
- tree match
910
- case tree : NamedDefTree if names(tree.name) => tree.withAttachment(NoWarn , ())
911
- case _ =>
912
- traverseChildren(tree)
913
- relaxer.traverse(tree)
901
+ def relax (tree : Tree , tpe : Type )(using Context ): Unit =
902
+ def refinements (tpe : Type , names : List [Name ]): List [Name ] =
903
+ tpe match
904
+ case RefinedType (parent, refinedName, refinedInfo) => refinedName :: refinements(parent, names)
905
+ case _ => names
906
+ val refinedNames = refinements(tpe, Nil )
907
+ if ! refinedNames.isEmpty then
908
+ val names = refinedNames.toSet
909
+ val relaxer = new TreeTraverser :
910
+ def traverse (tree : Tree )(using Context ) =
911
+ tree match
912
+ case tree : NamedDefTree if names(tree.name) => tree.withAttachment(NoWarn , ())
913
+ case _ =>
914
+ traverseChildren(tree)
915
+ relaxer.traverse(tree)
914
916
915
917
extension (nm : Name )
916
918
inline def exists (p : Name => Boolean ): Boolean = nm.ne(nme.NO_NAME ) && p(nm)
0 commit comments