diff options
author | Martin Odersky <odersky@gmail.com> | 2011-10-28 16:48:58 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-10-28 16:48:58 +0000 |
commit | 61117024744d756fb95b77f9672c4d9a5405f75b (patch) | |
tree | 755e9c62748f86b16460359032f51e12724cff86 | |
parent | 49f352d890aa326f6e0c6349ea89e4e0d23b1de5 (diff) | |
download | scala-61117024744d756fb95b77f9672c4d9a5405f75b.tar.gz scala-61117024744d756fb95b77f9672c4d9a5405f75b.tar.bz2 scala-61117024744d756fb95b77f9672c4d9a5405f75b.zip |
Tentative fix for IDE #1000663.
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/Global.scala | 18 |
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 } |