Skip to content

Commit c6051b4

Browse files
committed
Parameter name can be masked in import
1 parent ff7e01c commit c6051b4

File tree

2 files changed

+51
-31
lines changed

2 files changed

+51
-31
lines changed

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

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
384384
if matches then sel else loop(sels)
385385
case nil => null
386386
loop(info.selectors)
387+
end matchingSelector
387388

388389
def checkMember(ctxsym: Symbol): Boolean =
389390
ctxsym.isClass && sym.owner.isClass
@@ -407,38 +408,37 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
407408
val cur = ctxs.next()
408409
if cur.owner.userSymbol == sym && !sym.is(Package) then
409410
enclosed = true // found enclosing definition, don't record the reference
410-
if isLocal then
411-
if cur.owner eq sym.owner then
412-
done = true // for local def, just checking that it is not enclosing
413-
else
414-
if cur.isImportContext then
415-
val sel = matchingSelector(cur.importInfo.nn)
416-
if sel != null then
417-
if cur.importInfo.nn.isRootImport then
418-
if precedence.weakerThan(OtherUnit) then
419-
precedence = OtherUnit
420-
candidate = cur
421-
importer = sel
422-
done = true
423-
else if sel.isWildcard then
424-
if precedence.weakerThan(Wildcard) then
425-
precedence = Wildcard
426-
candidate = cur
427-
importer = sel
428-
else
429-
if precedence.weakerThan(NamedImport) then
430-
precedence = NamedImport
431-
candidate = cur
432-
importer = sel
433-
else if checkMember(cur.owner) then
434-
if sym.is(Package) || sym.srcPos.sourcePos.source == ctx.source then
435-
precedence = Definition
436-
candidate = cur
437-
importer = null // ignore import in same scope; we can't check nesting level
411+
if cur.isImportContext then
412+
val sel = matchingSelector(cur.importInfo.nn)
413+
if sel != null then
414+
if cur.importInfo.nn.isRootImport then
415+
if precedence.weakerThan(OtherUnit) then
416+
precedence = OtherUnit
417+
candidate = cur
418+
importer = sel
438419
done = true
439-
else if precedence.weakerThan(OtherUnit) then
440-
precedence = OtherUnit
441-
candidate = cur
420+
else if sel.isWildcard then
421+
if precedence.weakerThan(Wildcard) then
422+
precedence = Wildcard
423+
candidate = cur
424+
importer = sel
425+
else
426+
if precedence.weakerThan(NamedImport) then
427+
precedence = NamedImport
428+
candidate = cur
429+
importer = sel
430+
else if isLocal then
431+
if cur.owner eq sym.owner then
432+
done = true // local def or param
433+
else if checkMember(cur.owner) then
434+
if sym.is(Package) || sym.srcPos.sourcePos.source == ctx.source then
435+
precedence = Definition
436+
candidate = cur
437+
importer = null // ignore import in same scope; we can't check nesting level
438+
done = true
439+
else if precedence.weakerThan(OtherUnit) then
440+
precedence = OtherUnit
441+
candidate = cur
442442
end while
443443
// record usage and possibly an import
444444
if !enclosed then

tests/warn/i24633.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//> using options -Werror -Wunused:imports
2+
3+
object foo {
4+
val min = 0
5+
val max = 1
6+
}
7+
8+
def test(max: Int) = {
9+
import foo.{max as _, *}
10+
s"$min - $max"
11+
}
12+
13+
def local =
14+
val max = 42
15+
import foo.{max as _, *}
16+
s"$min - $max"
17+
18+
class Limit(max: Int):
19+
import foo.{max as _, *}
20+
def test = s"$min - $max"

0 commit comments

Comments
 (0)