make sortModules tailrec

This commit is contained in:
Eugene Yokota 2015-07-25 17:38:11 -04:00
parent 72b8fd1025
commit 593850562a
1 changed files with 6 additions and 5 deletions

View File

@ -407,9 +407,11 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
}: _*) }: _*)
val stackGuard = reports0.size * reports0.size * 2 val stackGuard = reports0.size * reports0.size * 2
// sort the all modules such that less called modules comes earlier // sort the all modules such that less called modules comes earlier
def sortModules(cs: ListMap[(String, String), Vector[OrganizationArtifactReport]], @tailrec def sortModules(cs: ListMap[(String, String), Vector[OrganizationArtifactReport]],
acc: ListMap[(String, String), Vector[OrganizationArtifactReport]],
n: Int): ListMap[(String, String), Vector[OrganizationArtifactReport]] = n: Int): ListMap[(String, String), Vector[OrganizationArtifactReport]] =
{ {
println(s"sortModules: $n / $stackGuard")
val keys = cs.keySet val keys = cs.keySet
val (called, notCalled) = cs partition { val (called, notCalled) = cs partition {
case (k, oas) => case (k, oas) =>
@ -422,9 +424,8 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
} }
} }
} }
notCalled ++ (if (called.isEmpty || n > stackGuard) acc ++ notCalled ++ called
(if (called.isEmpty || n > stackGuard) called else sortModules(called, acc ++ notCalled, n + 1))
else sortModules(called, n + 1))
} }
def resolveConflicts(cs: List[((String, String), Vector[OrganizationArtifactReport])]): List[OrganizationArtifactReport] = def resolveConflicts(cs: List[((String, String), Vector[OrganizationArtifactReport])]): List[OrganizationArtifactReport] =
cs match { cs match {
@ -446,7 +447,7 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
x :: resolveConflicts(next) x :: resolveConflicts(next)
}) })
} }
val sorted = sortModules(allModules, 0) val sorted = sortModules(allModules, ListMap(), 0)
val result = resolveConflicts(sorted.toList) val result = resolveConflicts(sorted.toList)
result.toVector result.toVector
} }