From 75fe0c8bd628df9abbc6a90b5046757b48538294 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 8 Feb 2011 11:12:16 +0000 Subject: Made after-type-delay configurable in Eclipse. --- src/compiler/scala/tools/nsc/interactive/Global.scala | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3