summaryrefslogtreecommitdiff
path: root/core/src/mill/define/Task.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-23 01:38:20 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-23 01:50:56 -0800
commit0ea8b3d10ae7500426b174a33ef70d03d474ecc4 (patch)
treeee18b2e3605dd3c71c0d00d9eed7383b4a38529c /core/src/mill/define/Task.scala
parent4a0658da074bc7b7df0c5bdff90e2c6bb1977b15 (diff)
downloadmill-0ea8b3d10ae7500426b174a33ef70d03d474ecc4.tar.gz
mill-0ea8b3d10ae7500426b174a33ef70d03d474ecc4.tar.bz2
mill-0ea8b3d10ae7500426b174a33ef70d03d474ecc4.zip
WIP splitting `mill.scalaworker` out of `mill.scalalib` and into it's own isolated module/classloader. Most scalalib test pass, tho GenIdea is still broken
Diffstat (limited to 'core/src/mill/define/Task.scala')
-rw-r--r--core/src/mill/define/Task.scala26
1 files changed, 25 insertions, 1 deletions
diff --git a/core/src/mill/define/Task.scala b/core/src/mill/define/Task.scala
index 248f145c..bafabd01 100644
--- a/core/src/mill/define/Task.scala
+++ b/core/src/mill/define/Task.scala
@@ -37,6 +37,7 @@ abstract class Task[+T] extends Task.Ops[T] with Applyable[Task, T]{
def asTarget: Option[Target[T]] = None
def asCommand: Option[Command[T]] = None
def asPersistent: Option[Persistent[T]] = None
+ def asWorker: Option[Worker[T]] = None
def self = this
}
@@ -179,6 +180,21 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
)
}
+ def worker[T](t: Task[T])
+ (implicit ctx: mill.define.Ctx): Worker[T] = new Worker(t, ctx)
+
+ def worker[T](t: Result[T])
+ (implicit ctx: mill.define.Ctx): Worker[T] = macro workerImpl[T]
+
+ def workerImpl[T: c.WeakTypeTag](c: Context)
+ (t: c.Expr[T])
+ (ctx: c.Expr[mill.define.Ctx]): c.Expr[Worker[T]] = {
+ import c.universe._
+ reify(
+ new Worker[T](Applicative.impl[Task, T, mill.util.Ctx](c)(t).splice, ctx.splice)
+ )
+ }
+
def task[T](t: Result[T]): Task[T] = macro Applicative.impl[Task, T, mill.util.Ctx]
def persistent[T](t: Result[T])(implicit r: R[T],
@@ -233,8 +249,8 @@ class TargetImpl[+T](t: Task[T],
val ctx = ctx0.copy(segments = ctx0.segments ++ Seq(ctx0.segment))
val inputs = Seq(t)
def evaluate(args: mill.util.Ctx) = args[T](0)
-
}
+
class Command[+T](t: Task[T],
ctx0: mill.define.Ctx,
val writer: W[_]) extends NamedTask[T] {
@@ -243,6 +259,14 @@ class Command[+T](t: Task[T],
def evaluate(args: mill.util.Ctx) = args[T](0)
override def asCommand = Some(this)
}
+
+class Worker[+T](t: Task[T],
+ ctx0: mill.define.Ctx) extends NamedTask[T] {
+ val ctx = ctx0.copy(segments = ctx0.segments ++ Seq(ctx0.segment))
+ val inputs = Seq(t)
+ def evaluate(args: mill.util.Ctx) = args[T](0)
+ override def asWorker = Some(this)
+}
class Persistent[+T](t: Task[T],
ctx0: mill.define.Ctx,
readWrite: RW[_])