diff options
author | Martin Odersky <odersky@gmail.com> | 2011-01-28 17:31:39 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-01-28 17:31:39 +0000 |
commit | b345da5ef44ee1ae1d57b98430baa59c74bf3700 (patch) | |
tree | d9479a1462ff563892e0ae01c81e94bfaf0bdb11 /src/compiler/scala/tools/nsc/interactive/CompilerControl.scala | |
parent | ad3910e7fe0aedbab09ba6a85614f41b45e8b107 (diff) | |
download | scala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.tar.gz scala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.tar.bz2 scala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.zip |
Various improvements to completion.
onUnitOf moved to CompilerControl and made public, so free for public
use now.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interactive/CompilerControl.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/CompilerControl.scala | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala index 32a780104d..9d29b781c1 100644 --- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala +++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala @@ -51,7 +51,14 @@ trait CompilerControl { self: Global => */ def getUnitOf(s: SourceFile): Option[RichCompilationUnit] = getUnit(s) - /** The compilation unit corresponding to a source file + /** Run operation `op` on a compilation unit assocuated with given `source`. + * If source has a loaded compilation unit, this one is passed to `op`. + * Otherwise a new compilation unit is created, but not added to the set of loaded units. + */ + def onUnitOf[T](source: SourceFile)(op: RichCompilationUnit => T): T = + op(unitOfFile.getOrElse(source.file, new RichCompilationUnit(source))) + + /** The compilation unit corresponding to a source file * 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. */ @@ -193,6 +200,10 @@ trait CompilerControl { self: Global => /** Returns parse tree for source `source`. No symbols are entered. Syntax errors are reported. */ def askParse(source: SourceFile, response: Response[Tree]) = respond(response) { + parseTree(source) + } + + def parseTree(source: SourceFile): Tree = ask { () => getUnit(source) match { case Some(unit) if unit.status >= JustParsed => unit.body |