summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Cunei <antonio.cunei@epfl.ch>2011-11-07 16:43:06 +0000
committerAntonio Cunei <antonio.cunei@epfl.ch>2011-11-07 16:43:06 +0000
commit529127bacaccbcf1f54062d635fc5a4b0c212c4f (patch)
tree86e982214d83c11ddea72b4f52f196fdbcb1a414
parentda929738ccfcf21cc3d8fdb9ce7734e59c6847f0 (diff)
downloadscala-529127bacaccbcf1f54062d635fc5a4b0c212c4f.tar.gz
scala-529127bacaccbcf1f54062d635fc5a4b0c212c4f.tar.bz2
scala-529127bacaccbcf1f54062d635fc5a4b0c212c4f.zip
Backported r25904 and r25959.
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Global.scala18
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala2
-rw-r--r--test/files/pos/t5013/Bar_2.scala5
-rw-r--r--test/files/pos/t5013/Foo_1.scala5
4 files changed, 26 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index c7a4204222..1bbaef9912 100644
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -834,6 +834,11 @@ class Global(settings: Settings, reporter: Reporter, projectName: String = "")
}
}
+ def addNonShadowed(other: Members[M]) = {
+ for ((name, ms) <- other)
+ if (ms.nonEmpty && this(name).isEmpty) this(name) = ms
+ }
+
def allMembers: List[M] = values.toList.flatten
}
@@ -842,31 +847,38 @@ class Global(settings: Settings, reporter: Reporter, projectName: String = "")
typedTreeAt(pos) // to make sure context is entered
val context = doLocateContext(pos)
val locals = new Members[ScopeMember]
+ val enclosing = new Members[ScopeMember]
def addScopeMember(sym: Symbol, pre: Type, viaImport: Tree) =
locals.add(sym, pre, false) { (s, st) =>
new ScopeMember(s, st, context.isAccessible(s, pre, false), viaImport)
}
+ def localsToEnclosing() = {
+ enclosing.addNonShadowed(locals)
+ locals.clear()
+ }
//print("add scope members")
var cx = context
while (cx != NoContext) {
for (sym <- cx.scope)
addScopeMember(sym, NoPrefix, EmptyTree)
+ localsToEnclosing()
if (cx == cx.enclClass) {
val pre = cx.prefix
for (sym <- pre.members)
addScopeMember(sym, pre, EmptyTree)
+ localsToEnclosing()
}
cx = cx.outer
}
//print("\nadd imported members")
for (imp <- context.imports) {
val pre = imp.qual.tpe
- for (sym <- imp.allImportedSymbols) {
+ for (sym <- imp.allImportedSymbols)
addScopeMember(sym, pre, imp.qual)
- }
+ localsToEnclosing()
}
// println()
- val result = locals.allMembers
+ val result = enclosing.allMembers
// if (debugIDE) for (m <- result) println(m)
result
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
index dfe07ed33b..76cdf2e9c8 100644
--- a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
@@ -145,7 +145,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
checkCompanionNameClashes(sym)
val decls = sym.info.decls
for (s <- decls.toList) {
- if (s.privateWithin.isClass && !s.privateWithin.isModuleClass &&
+ if (s.privateWithin.isClass && !s.isProtected && !s.privateWithin.isModuleClass &&
!s.hasFlag(EXPANDEDNAME) && !s.isConstructor) {
decls.unlink(s)
s.expandName(s.privateWithin)
diff --git a/test/files/pos/t5013/Bar_2.scala b/test/files/pos/t5013/Bar_2.scala
new file mode 100644
index 0000000000..9eac556a23
--- /dev/null
+++ b/test/files/pos/t5013/Bar_2.scala
@@ -0,0 +1,5 @@
+package b
+
+class Bar extends a.Foo {
+ println(x) // Error: Not found: value x
+}
diff --git a/test/files/pos/t5013/Foo_1.scala b/test/files/pos/t5013/Foo_1.scala
new file mode 100644
index 0000000000..ee21112a3e
--- /dev/null
+++ b/test/files/pos/t5013/Foo_1.scala
@@ -0,0 +1,5 @@
+package a
+
+class Foo {
+ protected[Foo] var x = 0
+}