diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-23 01:38:20 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-23 01:50:56 -0800 |
commit | 0ea8b3d10ae7500426b174a33ef70d03d474ecc4 (patch) | |
tree | ee18b2e3605dd3c71c0d00d9eed7383b4a38529c /core/src/mill/define/Task.scala | |
parent | 4a0658da074bc7b7df0c5bdff90e2c6bb1977b15 (diff) | |
download | mill-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.scala | 26 |
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[_]) |