summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-01-24 16:40:32 +0000
committerMartin Odersky <odersky@gmail.com>2011-01-24 16:40:32 +0000
commit6300d5e277ed7241f83b2286efe2307b0392484e (patch)
treebb7a06cff620b22319311f8e265cf6131bc21479 /src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
parent19b45e964354069137266b101ca06d8541d5d1c3 (diff)
downloadscala-6300d5e277ed7241f83b2286efe2307b0392484e.tar.gz
scala-6300d5e277ed7241f83b2286efe2307b0392484e.tar.bz2
scala-6300d5e277ed7241f83b2286efe2307b0392484e.zip
Better behavior on completions.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interactive/CompilerControl.scala')
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
index 3171df2fdc..a0104c2395 100644
--- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
+++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
@@ -53,11 +53,11 @@ trait CompilerControl { self: Global =>
* if it does not yet exist create a new one atomically
* Note: We want to get roid of this operation as it messes compiler invariants.
*/
- @deprecated("use getUnitOf(s) instead")
+ @deprecated("use getUnitOf(s) or onUnitOf(s) instead")
def unitOf(s: SourceFile): RichCompilationUnit = getOrCreateUnitOf(s)
/** The compilation unit corresponding to a position */
- @deprecated("use getUnitOf(pos.source) instead")
+ @deprecated("use getUnitOf(pos.source) or onUnitOf(pos.source) instead")
def unitOf(pos: Position): RichCompilationUnit = getOrCreateUnitOf(pos.source)
/** Removes the CompilationUnit corresponding to the given SourceFile
@@ -75,14 +75,14 @@ trait CompilerControl { self: Global =>
}
/** Locate smallest tree that encloses position
+ * @pre Position must be loaded
*/
- def locateTree(pos: Position): Tree =
- new Locator(pos) locateIn unitOf(pos).body
+ def locateTree(pos: Position): Tree = onUnitOf(pos.source) { unit => new Locator(pos) locateIn unit.body }
/** Locates smallest context that encloses position as an optional value.
*/
def locateContext(pos: Position): Option[Context] =
- locateContext(unitOf(pos).contexts, pos)
+ for (unit <- getUnit(pos.source); cx <- locateContext(unit.contexts, pos)) yield cx
/** Returns the smallest context that contains given `pos`, throws FatalError if none exists.
*/
@@ -113,8 +113,13 @@ trait CompilerControl { self: Global =>
/** Sets sync var `response` to the fully attributed & typechecked tree contained in `source`.
* @pre `source` needs to be loaded.
*/
- def askType(source: SourceFile, forceReload: Boolean, response: Response[Tree]) =
+ def askType(source: SourceFile, forceReload: Boolean, response: Response[Tree]) = {
+ if (debugIDE) {
+ println("ask type called")
+ new Exception().printStackTrace()
+ }
scheduler postWorkItem new AskTypeItem(source, forceReload, response)
+ }
/** Sets sync var `response` to the position of the definition of the given link in
* the given sourcefile.