summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-02-08 11:12:16 +0000
committerMartin Odersky <odersky@gmail.com>2011-02-08 11:12:16 +0000
commit75fe0c8bd628df9abbc6a90b5046757b48538294 (patch)
tree76e6a7b39df8b0635fdaefaedcd927906f0ed33d
parentc8e8d798700103fc87f92a7fd0c345fdce43f8d2 (diff)
downloadscala-75fe0c8bd628df9abbc6a90b5046757b48538294.tar.gz
scala-75fe0c8bd628df9abbc6a90b5046757b48538294.tar.bz2
scala-75fe0c8bd628df9abbc6a90b5046757b48538294.zip
Made after-type-delay configurable in Eclipse.
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Global.scala18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index f369190016..88e47d9cb8 100644
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -36,6 +36,8 @@ self =>
private def replayName = settings.YpresentationReplay.value
private def logName = settings.YpresentationLog.value
+ private def afterTypeDelay = settings.YpresentationDelay.value
+ private final val SleepTime = 10
val log =
if (replayName != "") new Replayer(new FileReader(replayName))
@@ -207,6 +209,7 @@ self =>
var moreWorkAtNode: Int = -1
var nodesSeen = 0
+ var lastWasReload = false
/** The number of pollForWorks after which the presentation compiler yields.
* Yielding improves responsiveness on systems with few cores because it
@@ -266,7 +269,10 @@ self =>
case Some(ex: Throwable) => log.flush(); throw ex
case _ =>
}
- logreplay("workitem", scheduler.nextWorkItem()) match {
+
+ lastWasReload = false
+
+ logreplay("workitem", scheduler.nextWorkItem()) match {
case Some(action) =>
try {
debugLog("picked up work item at "+pos+": "+action)
@@ -345,6 +351,15 @@ self =>
if (unit.status == NotLoaded) parseAndEnter(unit)
}
+ /** Sleep window */
+ if (afterTypeDelay > 0 && lastWasReload) {
+ val limit = System.currentTimeMillis() + afterTypeDelay
+ while (System.currentTimeMillis() < limit) {
+ Thread.sleep(SleepTime)
+ pollForWork(NoPosition)
+ }
+ }
+
for (s <- allSources; unit <- getUnit(s)) {
if (!unit.isUpToDate) typeCheck(unit)
else debugLog("already up to date: "+unit)
@@ -479,6 +494,7 @@ self =>
/** Make sure a set of compilation units is loaded and parsed */
def reload(sources: List[SourceFile], response: Response[Unit]) {
informIDE("reload: " + sources)
+ lastWasReload = true
respond(response)(reloadSources(sources))
if (outOfDate) throw FreshRunReq // cancel background compile
else outOfDate = true // proceed normally and enable new background compile