Skip to content

Commit e7f310b

Browse files
committed
Fix selecting unaliased selector in wunused
1 parent c7a5d0b commit e7f310b

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,12 +590,13 @@ object CheckUnused:
590590
private def isInImport(imp: tpd.Import, isAccessible: Boolean, symName: Option[Name])(using Context): Option[ImportSelector] =
591591
val tpd.Import(qual, sels) = imp
592592
val dealiasedSym = dealias(sym)
593+
val simpleSelections = qual.tpe.member(sym.name).alternatives
593594
val typeSelections = sels.flatMap(n => qual.tpe.member(n.name.toTypeName).alternatives)
594595
val termSelections = sels.flatMap(n => qual.tpe.member(n.name.toTermName).alternatives)
595-
val allSelections = typeSelections ::: termSelections :::qual.tpe.member(sym.name).alternatives
596-
val qualHasSymbol = allSelections.map(_.symbol).map(dealias).contains(dealiasedSym)
596+
val selectionsToDealias = typeSelections ::: termSelections
597+
val qualHasSymbol = simpleSelections.map(_.symbol).contains(sym) || (simpleSelections ::: selectionsToDealias).map(_.symbol).map(dealias).contains(dealiasedSym)
597598
def selector = sels.find(sel => (sel.name.toTermName == sym.name || sel.name.toTypeName == sym.name) && symName.map(n => n.toTermName == sel.rename).getOrElse(true))
598-
def dealiasedSelector = sels.flatMap(sel => allSelections.map(m => (sel, m.symbol))).collect {
599+
def dealiasedSelector = sels.flatMap(sel => selectionsToDealias.map(m => (sel, m.symbol))).collect {
599600
case (sel, sym) if dealias(sym) == dealiasedSym => sel
600601
}.headOption
601602
def wildcard = sels.find(sel => sel.isWildcard && ((sym.is(Given) == sel.isGiven) || sym.is(Implicit)))
@@ -604,6 +605,7 @@ object CheckUnused:
604605
else
605606
None
606607

608+
607609
private def dealias(symbol: Symbol)(using Context): Symbol =
608610
if(symbol.isType && symbol.asType.denot.isAliasType) then
609611
symbol.asType.typeRef.dealias.typeSymbol

0 commit comments

Comments
 (0)