11package dotty .tools .dotc .transform
22
33import dotty .tools .dotc .ast .tpd
4- import dotty .tools .dotc .ast .tpd .TreeTraverser
4+ import dotty .tools .dotc .ast .tpd .{ Inlined , TreeTraverser }
55import dotty .tools .dotc .ast .untpd
66import dotty .tools .dotc .ast .untpd .ImportSelector
77import dotty .tools .dotc .config .ScalaSettings
@@ -15,19 +15,14 @@ import dotty.tools.dotc.reporting.Message
1515import dotty .tools .dotc .typer .ImportInfo
1616import dotty .tools .dotc .util .{Property , SrcPos }
1717import dotty .tools .dotc .core .Mode
18- import dotty .tools .dotc .core .Types .TypeTraverser
19- import dotty .tools .dotc .core .Types .Type
20- import dotty .tools .dotc .core .Types .AnnotatedType
18+ import dotty .tools .dotc .core .Types .{AnnotatedType , ConstantType , NoType , TermRef , Type , TypeTraverser }
2119import dotty .tools .dotc .core .Flags .flagsString
2220import dotty .tools .dotc .core .Flags
2321import dotty .tools .dotc .core .Names .Name
2422import dotty .tools .dotc .transform .MegaPhase .MiniPhase
2523import dotty .tools .dotc .core .Annotations
2624import dotty .tools .dotc .core .Definitions
27- import dotty .tools .dotc .core .Types .ConstantType
2825import dotty .tools .dotc .core .NameKinds .WildcardParamName
29- import dotty .tools .dotc .core .Types .TermRef
30- import dotty .tools .dotc .core .Types .NameFilter
3126import dotty .tools .dotc .core .Symbols .Symbol
3227
3328
@@ -80,8 +75,16 @@ class CheckUnused extends MiniPhase:
8075 traverser.traverse(tree)
8176 ctx
8277
78+ override def prepareForInlined (tree : tpd.Inlined )(using Context ): Context =
79+ traverser.traverse(tree.call)
80+ ctx
81+
8382 override def prepareForIdent (tree : tpd.Ident )(using Context ): Context =
8483 if tree.symbol.exists then
84+ val prefixes = LazyList .iterate(tree.typeOpt.normalizedPrefix)(_.normalizedPrefix).takeWhile(_ != NoType )
85+ .take(10 ) // Failsafe for the odd case if there was an infinite cycle
86+ for prefix <- prefixes do
87+ unusedDataApply(_.registerUsed(prefix.classSymbol, None ))
8588 unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
8689 else if tree.hasType then
8790 unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some (tree.name)))
@@ -409,7 +412,6 @@ object CheckUnused:
409412 val kept = used.filterNot { t =>
410413 val (sym, isAccessible, optName) = t
411414 // keep the symbol for outer scope, if it matches **no** import
412-
413415 // This is the first matching wildcard selector
414416 var selWildCard : Option [ImportSelector ] = None
415417
0 commit comments