@@ -33,6 +33,7 @@ import scala.tools.nsc.io.AbstractFile
33
33
import scala .tools .nsc .reporters .{ConsoleReporter , Reporter }
34
34
import scala .tools .nsc .util .ClassPath
35
35
import scala .util .{Failure , Success , Try }
36
+ import PipelineMain .{BuildStrategy , Traditional , OutlineTypePipeline , Pipeline }
36
37
37
38
class PipelineMainClass (label : String , parallelism : Int , strategy : BuildStrategy , argFiles : Seq [Path ], useJars : Boolean ) {
38
39
private val pickleCacheConfigured = System .getProperty(" scala.pipeline.picklecache" )
@@ -234,16 +235,16 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
234
235
}
235
236
strategy match {
236
237
case OutlineTypePipeline =>
237
- projects.foreach { p =>
238
+ projects.foreach { p : Task =>
238
239
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))
240
241
val f = if (isLeaf) {
241
242
for {
242
243
_ <- depsReady
243
244
_ <- {
244
245
p.outlineDone.complete(Success (()))
245
246
p.fullCompile()
246
- Future .sequence (p.groups.map (_.done.future) )
247
+ Future .traverse (p.groups) (_.done.future)
247
248
}
248
249
} yield {
249
250
p.javaCompile()
@@ -257,7 +258,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
257
258
}
258
259
_ <- {
259
260
p.fullCompile()
260
- Future .sequence (p.groups.map (_.done.future) )
261
+ Future .traverse (p.groups) (_.done.future)
261
262
}
262
263
} yield {
263
264
p.javaCompile()
@@ -286,7 +287,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
286
287
println(f " Wall Clock: ${timer.durationMs}%.0f ms " )
287
288
case Pipeline =>
288
289
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))
290
291
val f = for {
291
292
_ <- depsReady
292
293
_ <- {
@@ -297,7 +298,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
297
298
} else
298
299
p.fullCompileExportPickles()
299
300
// Start javac after scalac has completely finished
300
- Future .sequence (p.groups.map (_.done.future) )
301
+ Future .traverse (p.groups) (_.done.future)
301
302
}
302
303
} yield {
303
304
p.javaCompile()
@@ -324,11 +325,11 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
324
325
println(f " Wall Clock: ${timer.durationMs}%.0f ms " )
325
326
case Traditional =>
326
327
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)
328
329
val f2 = f1.flatMap { _ =>
329
330
p.outlineDone.complete(Success (()))
330
331
p.fullCompile()
331
- Future .sequence (p.groups.map (_.done.future) ).map(_ => p.javaCompile())
332
+ Future .traverse (p.groups) (_.done.future).map(_ => p.javaCompile())
332
333
}
333
334
f2.onComplete { _ => p.compiler.close() }
334
335
}
@@ -462,7 +463,7 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
462
463
val outlineDoneFuture = outlineDone.future
463
464
val javaDone : Promise [Unit ] = Promise [Unit ]()
464
465
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)
466
467
val futures : List [Future [_]] = {
467
468
outlineDone.future :: javaDone.future :: groups.map(_.done.future)
468
469
}
@@ -646,17 +647,18 @@ class PipelineMainClass(label: String, parallelism: Int, strategy: BuildStrategy
646
647
}
647
648
}
648
649
649
- sealed abstract class BuildStrategy
650
650
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
653
656
654
- case object Pipeline extends BuildStrategy
657
+ case object Pipeline extends BuildStrategy
655
658
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
658
661
659
- object PipelineMain {
660
662
def main (args : Array [String ]): Unit = {
661
663
val strategies = List (OutlineTypePipeline , Pipeline , Traditional )
662
664
val strategy = strategies.find(_.productPrefix.equalsIgnoreCase(System .getProperty(" scala.pipeline.strategy" , " pipeline" ))).get
0 commit comments