Skip to content

Commit 2c050aa

Browse files
som-snyttWojciechMazur
authored andcommitted
Enclosing package p.q not visible as q
1 parent c504b7d commit 2c050aa

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,14 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
350350
var candidate: Context = NoContext
351351
var importer: ImportSelector | Null = null // non-null for import context
352352
var precedence = NoPrecedence // of current resolution
353+
var enclosed = false // true if sym is owner of an enclosing context
353354
var done = false
354355
val ctxs = ctx.outersIterator
355356
while !done && ctxs.hasNext do
356357
val cur = ctxs.next()
357-
if cur.owner eq sym then
358-
addCached(cachePoint, Definition)
359-
return // found enclosing definition
360-
else if isLocal then
358+
if cur.owner.userSymbol == sym && !sym.is(Package) then
359+
enclosed = true // found enclosing definition, don't register the reference
360+
if isLocal then
361361
if cur.owner eq sym.owner then
362362
done = true // for local def, just checking that it is not enclosing
363363
else
@@ -381,7 +381,7 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
381381
candidate = cur
382382
importer = sel
383383
else if checkMember(cur.owner) then
384-
if sym.srcPos.sourcePos.source == ctx.source then
384+
if sym.is(Package) || sym.srcPos.sourcePos.source == ctx.source then
385385
precedence = Definition
386386
candidate = cur
387387
importer = null // ignore import in same scope; we can't check nesting level
@@ -391,7 +391,8 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha
391391
candidate = cur
392392
end while
393393
// record usage and possibly an import
394-
refInfos.refs.addOne(sym)
394+
if !enclosed then
395+
refInfos.refs.addOne(sym)
395396
if candidate != NoContext && candidate.isImportContext && importer != null then
396397
refInfos.sels.put(importer, ())
397398
end resolveUsage

tests/warn/i23047.scala

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//> using options -Wunused:imports
2+
3+
package some.example:
4+
package demo:
5+
6+
import some.example // no warn because enclosing package example is not available as a simple name in some
7+
8+
object Main {
9+
10+
def generic[T](x: Any): T = null.asInstanceOf[T]
11+
12+
def main(args: Array[String]): Unit = {
13+
generic[example.Util](0)
14+
15+
import some.example.demo.Main // warn
16+
println(Main)
17+
18+
import some.example.demo // warn because enclosing package demo is available as a simple name
19+
println(demo.Main)
20+
}
21+
}
22+
23+
package some.example:
24+
25+
class Util

0 commit comments

Comments
 (0)