From 1ef79ba690dafb04333173afa046fe5d63d39c97 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 13:42:50 +0300 Subject: Optimization of transitiveDependencies method --- stage2/plugins/ExportBuildInformation.scala | 39 ++++++++++++----------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 720ccbe..3fd7394 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -160,32 +160,25 @@ object BuildInformation { .map(_.toFile) } - private def lazyBuild(dependency: Dependency): Seq[BaseBuild] = - dependency match { - case l: LazyDependency => - l.dependency match { - case d: BaseBuild => Seq(d) - case d: LazyDependency => lazyBuild(d.dependency) - case _ => Seq.empty - } - case d: BaseBuild => Seq(d) - case _ => Seq.empty - } - // More effectively to call on a all builds at once rather than on one per time private def transitiveBuilds(builds: Seq[BaseBuild], skipTests: Boolean = false): Seq[BaseBuild] = { def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = - (build +: build.transitiveDependencies) - .collect { - case d: BaseBuild => - Seq(d) ++ parentBuild(d) ++ (if (!skipTests) testBuild(d) else Seq.empty) - case d: LazyDependency => - lazyBuild(d.dependency) - } - .flatten - .distinct - .filterNot(visited.contains) - .foldLeft(build +: visited)(traverse) + if (visited.contains(build)) + visited + else + (Seq(build) ++ + build.transitiveDependencies ++ + parentBuild(build) ++ + (if (!skipTests) testBuild(build) else Seq.empty) + ) + .collect { + case d: BaseBuild => + d + case d: LazyDependency if d.dependency.isInstanceOf[BaseBuild] => + d.dependency.asInstanceOf[BaseBuild] + } + .filterNot(visited.contains) + .foldLeft(build +: visited)(traverse) builds.foldLeft(Seq.empty[BaseBuild])(traverse) } -- cgit v1.2.3