summaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-10-22 17:27:43 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2017-10-22 17:27:43 -0700
commit991e404da10ce66a35206fe4e16784582503ee74 (patch)
tree741dbaeae6223059c12e8eb8e358f66a64dab3a6 /src/main/scala
parent0ed7e0472b9a82ab749e8d3be5795506e53451ab (diff)
downloadmill-991e404da10ce66a35206fe4e16784582503ee74.tar.gz
mill-991e404da10ce66a35206fe4e16784582503ee74.tar.bz2
mill-991e404da10ce66a35206fe4e16784582503ee74.zip
Extract `topoSortedTransitiveTargets` into `Evaluator` companion object
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/forge/Evaluator.scala57
1 files changed, 31 insertions, 26 deletions
diff --git a/src/main/scala/forge/Evaluator.scala b/src/main/scala/forge/Evaluator.scala
index d2fdcb53..fb45aa32 100644
--- a/src/main/scala/forge/Evaluator.scala
+++ b/src/main/scala/forge/Evaluator.scala
@@ -9,38 +9,13 @@ import scala.collection.mutable
class Evaluator(workspacePath: jnio.Path,
enclosingBase: DefCtx){
- /**
- * Takes the given targets, finds
- */
- def topoSortedTransitiveTargets(sourceTargets: Seq[Target[_]]) = {
- val transitiveTargetSet = mutable.Set.empty[Target[_]]
- def rec(t: Target[_]): Unit = {
- if (transitiveTargetSet.contains(t)) () // do nothing
- else {
- transitiveTargetSet.add(t)
- t.inputs.foreach(rec)
- }
- }
-
- sourceTargets.foreach(rec)
- val transitiveTargets = transitiveTargetSet.toVector
- val targetIndices = transitiveTargets.zipWithIndex.toMap
- val numberedEdges =
- for(i <- transitiveTargets.indices)
- yield transitiveTargets(i).inputs.map(targetIndices)
-
- val sortedClusters = Tarjans(numberedEdges)
- val nonTrivialClusters = sortedClusters.filter(_.length > 1)
- assert(nonTrivialClusters.isEmpty, nonTrivialClusters)
- sortedClusters.flatten.map(transitiveTargets)
- }
def apply[T](t: Target[T])
(implicit enclosing: Enclosing): T = {
jnio.Files.createDirectories(workspacePath)
- val sortedTargets = topoSortedTransitiveTargets(Seq(t))
+ val sortedTargets = Evaluator.topoSortedTransitiveTargets(Seq(t))
val results = mutable.Map.empty[Target[_], Any]
for (target <- sortedTargets){
val inputResults = target.inputs.map(results)
@@ -76,3 +51,33 @@ class Evaluator(workspacePath: jnio.Path,
}
}
}
+
+
+object Evaluator{
+ /**
+ * Takes the given targets, finds
+ */
+ def topoSortedTransitiveTargets(sourceTargets: Seq[Target[_]]) = {
+ val transitiveTargetSet = mutable.Set.empty[Target[_]]
+ def rec(t: Target[_]): Unit = {
+ if (transitiveTargetSet.contains(t)) () // do nothing
+ else {
+ transitiveTargetSet.add(t)
+ t.inputs.foreach(rec)
+ }
+ }
+
+ sourceTargets.foreach(rec)
+ val transitiveTargets = transitiveTargetSet.toVector
+ val targetIndices = transitiveTargets.zipWithIndex.toMap
+
+ val numberedEdges =
+ for(i <- transitiveTargets.indices)
+ yield transitiveTargets(i).inputs.map(targetIndices)
+
+ val sortedClusters = Tarjans(numberedEdges)
+ val nonTrivialClusters = sortedClusters.filter(_.length > 1)
+ assert(nonTrivialClusters.isEmpty, nonTrivialClusters)
+ sortedClusters.flatten.map(transitiveTargets)
+ }
+} \ No newline at end of file