summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2008-01-31 12:46:59 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2008-01-31 12:46:59 +0000
commitfb77e1641132d2b75509b8566234a0e1dfb26f80 (patch)
tree8c6609a14120dacb2724718a5245d4564ced79d5
parent62c8424646b340e3d322cbedb70b7222aa780926 (diff)
downloadscala-fb77e1641132d2b75509b8566234a0e1dfb26f80.tar.gz
scala-fb77e1641132d2b75509b8566234a0e1dfb26f80.tar.bz2
scala-fb77e1641132d2b75509b8566234a0e1dfb26f80.zip
Fix for old plugin.
-rw-r--r--src/compiler/scala/tools/nsc/models/SemanticTokens.scala21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
index caef645fef..5ebe6510ad 100644
--- a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
+++ b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
@@ -17,6 +17,9 @@ import scala.tools.nsc.util.{BatchSourceFile, NameTransformer, NoPosition, Posit
class SemanticTokens(val compiler: Global) {
import compiler._
+ object walker extends symtab.SymbolWalker {
+ lazy val global : compiler.type = compiler
+ }
abstract class Kind {}
object OBJECT extends Kind
@@ -195,7 +198,21 @@ class SemanticTokens(val compiler: Global) {
}
val list = new TokenList
- build(unit.body)
+ //build(unit.body)
+ val map = new scala.collection.jcl.LinkedHashMap[Int,Symbol]
+ map.clear // populate the map.
+ class visitor extends walker.Visitor {
+ def contains(pos : Position) = map.contains(pos.offset.get)
+ def apply(pos : Position) = map(pos.offset.get)
+ def update(pos : Position, sym : Symbol) : Unit = if (pos.offset.isDefined) {
+ val offset = pos.offset.get
+ map(offset) = sym
+ val isDef = pos.offset == sym.pos.offset
+ list.put(offset, (if (isDef) new Def(sym) else new Use(sym, NoType)));
+ }
+ }
+ walker.walk(unit.body, new visitor)(offset => unit.source.identifier(offset, compiler))
+
// ok start building....
def build[T <: Tree](trees : List[T]) : Unit =
@@ -416,7 +433,7 @@ class SemanticTokens(val compiler: Global) {
case e : Error => Console.err.println("SELECTQ: " + tree + " " + tree.qualifier + " " + (tree.qualifier.pos).dbgString); throw e;
}
try {
- if (tree.pos.offset.get >= unit.source.length) {
+ if (tree.pos.offset.isDefined && tree.pos.offset.get >= unit.source.length) {
if (false) Console.err.println("BAD_SELECT_QUALIFIER " + tree + " @ " + (tree.pos).dbgString);
} else {