Skip to content

Commit debfbc1

Browse files
committed
Fix wunused for deriving alias type that has a different name
1 parent 1d6ccf8 commit debfbc1

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

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

+5-2
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,12 @@ 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 qualHasSymbol = qual.tpe.member(sym.name).alternatives.map(_.symbol).map(dealias).contains(dealiasedSym)
593+
val typeSelections = sels.flatMap(n => qual.tpe.member(n.name.toTypeName).alternatives)
594+
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)
594597
def selector = sels.find(sel => (sel.name.toTermName == sym.name || sel.name.toTypeName == sym.name) && symName.map(n => n.toTermName == sel.rename).getOrElse(true))
595-
def dealiasedSelector = sels.flatMap(sel => qual.tpe.member(sym.name).alternatives.map(m => (sel, m.symbol))).collect {
598+
def dealiasedSelector = sels.flatMap(sel => allSelections.map(m => (sel, m.symbol))).collect {
596599
case (sel, sym) if dealias(sym) == dealiasedSym => sel
597600
}.headOption
598601
def wildcard = sels.find(sel => sel.isWildcard && ((sym.is(Given) == sel.isGiven) || sym.is(Implicit)))

tests/neg-custom-args/fatal-warnings/i15503i.scala

+11
Original file line numberDiff line numberDiff line change
@@ -273,3 +273,14 @@ package foo.test.i16679b:
273273
import Foo.x
274274
case class CoolClass(i: Int)
275275
println(summon[myPackage.CaseClassName[CoolClass]])
276+
277+
package foo.test.i17156:
278+
package a:
279+
trait Foo[A]
280+
281+
package b:
282+
type Xd = Foo
283+
284+
package c:
285+
import b.Xd
286+
trait Z derives Xd

0 commit comments

Comments
 (0)