summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/interactive/Global.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-10-28 16:48:58 +0000
committerMartin Odersky <odersky@gmail.com>2011-10-28 16:48:58 +0000
commit61117024744d756fb95b77f9672c4d9a5405f75b (patch)
tree755e9c62748f86b16460359032f51e12724cff86 /src/compiler/scala/tools/nsc/interactive/Global.scala
parent49f352d890aa326f6e0c6349ea89e4e0d23b1de5 (diff)
downloadscala-61117024744d756fb95b77f9672c4d9a5405f75b.tar.gz
scala-61117024744d756fb95b77f9672c4d9a5405f75b.tar.bz2
scala-61117024744d756fb95b77f9672c4d9a5405f75b.zip
Tentative fix for IDE #1000663.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interactive/Global.scala')
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Global.scala18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index 01a2aa38b6..03f8e9d92e 100644
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -832,6 +832,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
}
@@ -840,31 +845,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
}