File tree 2 files changed +14
-2
lines changed
compiler/src/dotty/tools/dotc/transform
tests/pos-special/fatal-warnings
2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -661,8 +661,10 @@ object CheckUnused:
661
661
val simpleSelections = qual.tpe.member(sym.name).alternatives
662
662
val typeSelections = sels.flatMap(n => qual.tpe.member(n.name.toTypeName).alternatives)
663
663
val termSelections = sels.flatMap(n => qual.tpe.member(n.name.toTermName).alternatives)
664
+ val sameTermPath = qual.isTerm && sym.exists && sym.owner.isType && qual.tpe.typeSymbol == sym.owner.asType
664
665
val selectionsToDealias = typeSelections ::: termSelections
665
- val qualHasSymbol = simpleSelections.map(_.symbol).contains(sym) || (simpleSelections ::: selectionsToDealias).map(_.symbol).map(dealias).contains(dealiasedSym)
666
+ val renamedSelection = if sameTermPath then sels.find(sel => sel.imported.name == sym.name) else None
667
+ val qualHasSymbol = simpleSelections.map(_.symbol).contains(sym) || (simpleSelections ::: selectionsToDealias).map(_.symbol).map(dealias).contains(dealiasedSym) || renamedSelection.isDefined
666
668
def selector = sels.find(sel => (sel.name.toTermName == sym.name || sel.name.toTypeName == sym.name) && symName.map(n => n.toTermName == sel.rename).getOrElse(true ))
667
669
def dealiasedSelector = if (isDerived) sels.flatMap(sel => selectionsToDealias.map(m => (sel, m.symbol))).collect {
668
670
case (sel, sym) if dealias(sym) == dealiasedSym => sel
@@ -672,7 +674,7 @@ object CheckUnused:
672
674
else None
673
675
def wildcard = sels.find(sel => sel.isWildcard && ((sym.is(Given ) == sel.isGiven && sel.bound.isEmpty) || sym.is(Implicit )))
674
676
if qualHasSymbol && (! isAccessible || sym.isRenamedSymbol(symName)) && sym.exists then
675
- selector.orElse(dealiasedSelector).orElse(givenSelector).orElse(wildcard) // selector with name or wildcard (or given)
677
+ selector.orElse(dealiasedSelector).orElse(givenSelector).orElse(wildcard).orElse(renamedSelection) // selector with name or wildcard (or given)
676
678
else
677
679
None
678
680
Original file line number Diff line number Diff line change
1
+ // scalac: -Wunused:all
2
+
3
+ trait Builder {
4
+ def foo (): Unit
5
+ }
6
+
7
+ def repro =
8
+ val builder : Builder = ???
9
+ import builder .{foo => bar }
10
+ bar()
You can’t perform that action at this time.
0 commit comments