Skip to content

Commit 0b1974c

Browse files
committed
Refactor PipelineMain
- Scope the build strategies inside object PipelineMain - Prefer Future.traverse to Future.sequence
1 parent 7707a76 commit 0b1974c

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

src/compiler/scala/tools/nsc/PipelineMain.scala

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import scala.tools.nsc.io.AbstractFile
3333
import scala.tools.nsc.reporters.{ConsoleReporter, Reporter}
3434
import scala.tools.nsc.util.ClassPath
3535
import scala.util.{Failure, Success, Try}
36+
import PipelineMain.{BuildStrategy, Traditional, OutlineTypePipeline, Pipeline}
3637

3738
class 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

Comments
 (0)