Skip to content

Commit 529127b

Browse files
author
Antonio Cunei
committed
Backported r25904 and r25959.
1 parent da92973 commit 529127b

File tree

4 files changed

+26
-4
lines changed

4 files changed

+26
-4
lines changed

src/compiler/scala/tools/nsc/interactive/Global.scala

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,11 @@ class Global(settings: Settings, reporter: Reporter, projectName: String = "")
834834
}
835835
}
836836

837+
def addNonShadowed(other: Members[M]) = {
838+
for ((name, ms) <- other)
839+
if (ms.nonEmpty && this(name).isEmpty) this(name) = ms
840+
}
841+
837842
def allMembers: List[M] = values.toList.flatten
838843
}
839844

@@ -842,31 +847,38 @@ class Global(settings: Settings, reporter: Reporter, projectName: String = "")
842847
typedTreeAt(pos) // to make sure context is entered
843848
val context = doLocateContext(pos)
844849
val locals = new Members[ScopeMember]
850+
val enclosing = new Members[ScopeMember]
845851
def addScopeMember(sym: Symbol, pre: Type, viaImport: Tree) =
846852
locals.add(sym, pre, false) { (s, st) =>
847853
new ScopeMember(s, st, context.isAccessible(s, pre, false), viaImport)
848854
}
855+
def localsToEnclosing() = {
856+
enclosing.addNonShadowed(locals)
857+
locals.clear()
858+
}
849859
//print("add scope members")
850860
var cx = context
851861
while (cx != NoContext) {
852862
for (sym <- cx.scope)
853863
addScopeMember(sym, NoPrefix, EmptyTree)
864+
localsToEnclosing()
854865
if (cx == cx.enclClass) {
855866
val pre = cx.prefix
856867
for (sym <- pre.members)
857868
addScopeMember(sym, pre, EmptyTree)
869+
localsToEnclosing()
858870
}
859871
cx = cx.outer
860872
}
861873
//print("\nadd imported members")
862874
for (imp <- context.imports) {
863875
val pre = imp.qual.tpe
864-
for (sym <- imp.allImportedSymbols) {
876+
for (sym <- imp.allImportedSymbols)
865877
addScopeMember(sym, pre, imp.qual)
866-
}
878+
localsToEnclosing()
867879
}
868880
// println()
869-
val result = locals.allMembers
881+
val result = enclosing.allMembers
870882
// if (debugIDE) for (m <- result) println(m)
871883
result
872884
}

src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
145145
checkCompanionNameClashes(sym)
146146
val decls = sym.info.decls
147147
for (s <- decls.toList) {
148-
if (s.privateWithin.isClass && !s.privateWithin.isModuleClass &&
148+
if (s.privateWithin.isClass && !s.isProtected && !s.privateWithin.isModuleClass &&
149149
!s.hasFlag(EXPANDEDNAME) && !s.isConstructor) {
150150
decls.unlink(s)
151151
s.expandName(s.privateWithin)

test/files/pos/t5013/Bar_2.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package b
2+
3+
class Bar extends a.Foo {
4+
println(x) // Error: Not found: value x
5+
}

test/files/pos/t5013/Foo_1.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package a
2+
3+
class Foo {
4+
protected[Foo] var x = 0
5+
}

0 commit comments

Comments
 (0)