@@ -33,6 +33,7 @@ import scala.tools.nsc.io.AbstractFile
3333import scala .tools .nsc .reporters .{ConsoleReporter , Reporter }
3434import scala .tools .nsc .util .ClassPath
3535import scala .util .{Failure , Success , Try }
36+ import PipelineMain .{BuildStrategy , Traditional , OutlineTypePipeline , Pipeline }
3637
3738class PipelineMainClass (label : String , parallelism : Int , strategy : BuildStrategy , argFiles : Seq [Path ], useJars : Boolean ) {
3839 private val pickleCacheConfigured = System .getProperty(" scala.pipeline.picklecache" )
@@ -234,16 +235,16 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
234235 }
235236 strategy match {
236237 case OutlineTypePipeline =>
237- projects.foreach { p =>
238+ projects.foreach { p : Task =>
238239 val isLeaf = ! dependedOn.contains(p)
239- val depsReady = Future .sequence (dependsOn.getOrElse(p, Nil ).map { task => p.dependencyReadyFuture(task) } )
240+ val depsReady = Future .traverse (dependsOn.getOrElse(p, Nil ))( task => p.dependencyReadyFuture(task))
240241 val f = if (isLeaf) {
241242 for {
242243 _ <- depsReady
243244 _ <- {
244245 p.outlineDone.complete(Success (()))
245246 p.fullCompile()
246- Future .sequence (p.groups.map (_.done.future))
247+ Future .traverse (p.groups) (_.done.future))
247248 }
248249 } yield {
249250 p.javaCompile()
@@ -257,7 +258,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
257258 }
258259 _ <- {
259260 p.fullCompile()
260- Future .sequence (p.groups.map (_.done.future) )
261+ Future .traverse (p.groups) (_.done.future)
261262 }
262263 } yield {
263264 p.javaCompile()
@@ -286,7 +287,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
286287 println(f " Wall Clock: ${timer.durationMs}%.0f ms " )
287288 case Pipeline =>
288289 projects.foreach { p =>
289- val depsReady = Future .sequence (dependsOn.getOrElse(p, Nil ).map (task => p.dependencyReadyFuture(task) ))
290+ val depsReady = Future .traverse (dependsOn.getOrElse(p, Nil )) (task => p.dependencyReadyFuture(task))
290291 val f = for {
291292 _ <- depsReady
292293 _ <- {
@@ -297,7 +298,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
297298 } else
298299 p.fullCompileExportPickles()
299300 // Start javac after scalac has completely finished
300- Future .sequence (p.groups.map (_.done.future) )
301+ Future .traverse (p.groups) (_.done.future)
301302 }
302303 } yield {
303304 p.javaCompile()
@@ -324,11 +325,11 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
324325 println(f " Wall Clock: ${timer.durationMs}%.0f ms " )
325326 case Traditional =>
326327 projects.foreach { p =>
327- val f1 = Future .sequence (dependsOn.getOrElse(p, Nil ).map (_.t.javaDone.future) )
328+ val f1 = Future .traverse (dependsOn.getOrElse(p, Nil )) (_.t.javaDone.future)
328329 val f2 = f1.flatMap { _ =>
329330 p.outlineDone.complete(Success (()))
330331 p.fullCompile()
331- Future .sequence (p.groups.map (_.done.future) ).map(_ => p.javaCompile())
332+ Future .traverse (p.groups) (_.done.future).map(_ => p.javaCompile())
332333 }
333334 f2.onComplete { _ => p.compiler.close() }
334335 }
@@ -462,7 +463,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
462463 val outlineDoneFuture = outlineDone.future
463464 val javaDone : Promise [Unit ] = Promise [Unit ]()
464465 val javaDoneFuture : Future [_] = javaDone.future
465- val groupsDoneFuture : Future [List [Unit ]] = Future .sequence (groups.map (_.done.future) )
466+ val groupsDoneFuture : Future [List [Unit ]] = Future .traverse (groups) (_.done.future)
466467 val futures : List [Future [_]] = {
467468 outlineDone.future :: javaDone.future :: groups.map(_.done.future)
468469 }
@@ -646,17 +647,18 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
646647 }
647648}
648649
649- sealed abstract class BuildStrategy
650650
651- /** Outline type check to compute type signatures as pickles as an input to downstream compilation. */
652- case object OutlineTypePipeline extends BuildStrategy
651+ object PipelineMain {
652+ sealed abstract class BuildStrategy
653+
654+ /** Outline type check to compute type signatures as pickles as an input to downstream compilation. */
655+ case object OutlineTypePipeline extends BuildStrategy
653656
654- case object Pipeline extends BuildStrategy
657+ case object Pipeline extends BuildStrategy
655658
656- /** Emit class files before triggering downstream compilation */
657- case object Traditional extends BuildStrategy
659+ /** Emit class files before triggering downstream compilation */
660+ case object Traditional extends BuildStrategy
658661
659- object PipelineMain {
660662 def main (args : Array [String ]): Unit = {
661663 val strategies = List (OutlineTypePipeline , Pipeline , Traditional )
662664 val strategy = strategies.find(_.productPrefix.equalsIgnoreCase(System .getProperty(" scala.pipeline.strategy" , " pipeline" ))).get
0 commit comments