summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-03-31 16:46:48 +0000
committerMartin Odersky <odersky@gmail.com>2011-03-31 16:46:48 +0000
commitb1cb4e114f6a3291ad2fdfbd12fa91193f885941 (patch)
tree49187b65018be6ed66aab2bb99f2d4972d1c68c9 /src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
parent93732bf1036db3e0002a51c92ead7a6da7b9194d (diff)
downloadscala-b1cb4e114f6a3291ad2fdfbd12fa91193f885941.tar.gz
scala-b1cb4e114f6a3291ad2fdfbd12fa91193f885941.tar.bz2
scala-b1cb4e114f6a3291ad2fdfbd12fa91193f885941.zip
recommitted 24578: All compiler control methods...
recommitted 24578: All compiler control methods now do something sensible when called from presentation compiler thread itself.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interactive/CompilerControl.scala')
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala21
1 files changed, 8 insertions, 13 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
index 76df0a6bd6..51ee6bf5fb 100644
--- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
+++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
@@ -132,13 +132,8 @@ 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]) = {
- if (debugIDE) {
- println("ask type called")
- new Exception().printStackTrace()
- }
+ def askType(source: SourceFile, forceReload: Boolean, response: Response[Tree]) =
postWorkItem(new AskTypeItem(source, forceReload, response))
- }
/** Sets sync var `response` to the position of the definition of the given link in
* the given sourcefile.
@@ -181,7 +176,7 @@ trait CompilerControl { self: Global =>
* the a NoSuchUnitError is raised in the response.
*/
def askLoadedTyped(source: SourceFile, response: Response[Tree]) =
- postWorkItem(new AskLoadedTypedItem(source, response))
+ postWorkItem(new AskLoadedTypedItem(source, response, onCompilerThread))
/** If source if not yet loaded, get an outline view with askParseEntered.
* If source is loaded, wait for it to be typechecked.
@@ -202,7 +197,7 @@ trait CompilerControl { self: Global =>
* @param response The response.
*/
def askParsedEntered(source: SourceFile, keepLoaded: Boolean, response: Response[Tree]) =
- postWorkItem(new AskParsedEnteredItem(source, keepLoaded, response))
+ postWorkItem(new AskParsedEnteredItem(source, keepLoaded, response, onCompilerThread))
/** Cancels current compiler run and start a fresh one where everything will be re-typechecked
* (but not re-loaded).
@@ -230,7 +225,7 @@ trait CompilerControl { self: Global =>
}
/** Asks for a computation to be done quickly on the presentation compiler thread */
- def ask[A](op: () => A): A = scheduler doQuickly op
+ def ask[A](op: () => A): A = if (onCompilerThread) op() else scheduler doQuickly op
/** Info given for every member found by completion
*/
@@ -295,13 +290,13 @@ trait CompilerControl { self: Global =>
override def toString = "linkpos "+sym+" in "+source
}
- class AskLoadedTypedItem(val source: SourceFile, response: Response[Tree]) extends WorkItem {
- def apply() = self.waitLoadedTyped(source, response)
+ class AskLoadedTypedItem(val source: SourceFile, response: Response[Tree], val onSameThread: Boolean) extends WorkItem {
+ def apply() = self.waitLoadedTyped(source, response, onSameThread)
override def toString = "wait loaded & typed "+source
}
- class AskParsedEnteredItem(val source: SourceFile, val keepLoaded: Boolean, response: Response[Tree]) extends WorkItem {
- def apply() = self.getParsedEntered(source, keepLoaded, response)
+ class AskParsedEnteredItem(val source: SourceFile, val keepLoaded: Boolean, response: Response[Tree], val onSameThread: Boolean) extends WorkItem {
+ def apply() = self.getParsedEntered(source, keepLoaded, response, onSameThread)
override def toString = "getParsedEntered "+source+", keepLoaded = "+keepLoaded
}
}