diff options
author | Martin Odersky <odersky@gmail.com> | 2011-02-08 11:12:16 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-02-08 11:12:16 +0000 |
commit | 75fe0c8bd628df9abbc6a90b5046757b48538294 (patch) | |
tree | 76e6a7b39df8b0635fdaefaedcd927906f0ed33d | |
parent | c8e8d798700103fc87f92a7fd0c345fdce43f8d2 (diff) | |
download | scala-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.scala | 18 |
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 |