summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.sbt1
-rw-r--r--core/src/main/scala/mill/Main.scala2
-rw-r--r--core/src/main/scala/mill/discover/Discovered.scala9
-rw-r--r--core/src/main/scala/mill/eval/Evaluator.scala18
-rw-r--r--core/src/main/scala/mill/eval/PathRef.scala5
-rw-r--r--core/src/main/scala/mill/package.scala1
-rw-r--r--core/src/main/scala/mill/util/JsonFormatters.scala57
-rw-r--r--core/src/main/scala/mill/util/OSet.scala14
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala24
9 files changed, 42 insertions, 89 deletions
diff --git a/build.sbt b/build.sbt
index 4cccc499..31d7eedd 100644
--- a/build.sbt
+++ b/build.sbt
@@ -44,7 +44,6 @@ lazy val core = project
"com.lihaoyi" %% "sourcecode" % "0.1.4",
"com.lihaoyi" %% "pprint" % "0.5.3",
"com.lihaoyi" % "ammonite" % "1.0.3" cross CrossVersion.full,
- "com.typesafe.play" %% "play-json" % "2.6.6",
"org.scala-sbt" %% "zinc" % "1.0.3",
"org.scala-sbt" % "test-interface" % "1.0"
)
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala
index f3af640f..22f84d32 100644
--- a/core/src/main/scala/mill/Main.scala
+++ b/core/src/main/scala/mill/Main.scala
@@ -8,7 +8,7 @@ import mill.define.Task
import mill.discover._
import mill.eval.Evaluator
import mill.util.OSet
-import play.api.libs.json.Format
+
import scala.annotation.tailrec
import ammonite.main.Scripts.pathScoptRead
diff --git a/core/src/main/scala/mill/discover/Discovered.scala b/core/src/main/scala/mill/discover/Discovered.scala
index 3595f21f..ca1479b9 100644
--- a/core/src/main/scala/mill/discover/Discovered.scala
+++ b/core/src/main/scala/mill/discover/Discovered.scala
@@ -2,7 +2,6 @@ package mill.discover
import mill.define.{Target, Task}
import mill.discover.Router.{EntryPoint, Result}
-import play.api.libs.json.Format
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context
@@ -16,11 +15,11 @@ class Discovered[T](val targets: Seq[LabelInfo[T, _]],
case class Hierarchy[T](path: Seq[String], node: T => Any, children: List[Hierarchy[T]])
case class Labelled[T](target: Task[T],
- format: Format[T],
+ format: upickle.default.ReadWriter[T],
segments: Seq[String])
case class LabelInfo[T, V](path: Seq[String],
- format: Format[V],
+ format: upickle.default.ReadWriter[V],
run: T => Task[V]) extends Info[T, V]
case class CommandInfo[T, V](path: Seq[String],
@@ -42,14 +41,14 @@ object Discovered {
} yield path
inconsistent
}
- def makeTuple[T, V](path: Seq[String], func: T => Task[V])(implicit f: Format[V]) = {
+ def makeTuple[T, V](path: Seq[String], func: T => Task[V])(implicit f: upickle.default.ReadWriter[V]) = {
LabelInfo(path, f, func)
}
def mapping[T: Discovered](t: T): Map[Task[_], Labelled[_]] = {
implicitly[Discovered[T]].apply(t)
- .map(x => x._3 -> Labelled(x._3.asInstanceOf[Task[Any]], x._2.asInstanceOf[Format[Any]], x._1))
+ .map(x => x._3 -> Labelled(x._3.asInstanceOf[Task[Any]], x._2.asInstanceOf[upickle.default.ReadWriter[Any]], x._1))
.toMap
}
diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala
index 6e103ace..74cb77d3 100644
--- a/core/src/main/scala/mill/eval/Evaluator.scala
+++ b/core/src/main/scala/mill/eval/Evaluator.scala
@@ -4,7 +4,7 @@ import ammonite.ops._
import mill.define.Task
import mill.discover.Labelled
import mill.util.{Args, MultiBiMap, OSet}
-import play.api.libs.json.{Format, JsValue, Json}
+
import scala.collection.mutable
class Evaluator(workspacePath: Path,
@@ -61,15 +61,15 @@ class Evaluator(workspacePath: Path,
val cached = for{
metadataPath <- metadataPath
- json <- scala.util.Try(Json.parse(read.getInputStream(metadataPath))).toOption
- (cachedHash, terminalResult) <- Json.fromJson[(Int, JsValue)](json).asOpt
+ json <- scala.util.Try(upickle.json.read(read(metadataPath))).toOption
+ (cachedHash, terminalResult) <- scala.util.Try(upickle.default.readJs[(Int, upickle.Js.Value)](json)).toOption
if cachedHash == inputsHash
} yield terminalResult
cached match{
case Some(terminalResult) =>
val newResults = mutable.LinkedHashMap.empty[Task[_], Any]
- newResults(terminal) = labeling(terminal).format.reads(terminalResult).get
+ newResults(terminal) = labeling(terminal).format.read(terminalResult)
(newResults, Nil)
case _ =>
@@ -83,9 +83,7 @@ class Evaluator(workspacePath: Path,
metadataPath.foreach(
write.over(
_,
- Json.prettyPrint(
- Json.toJson(inputsHash -> terminalResult)
- ),
+ upickle.default.write(inputsHash -> terminalResult, indent = 4)
)
)
@@ -99,7 +97,7 @@ class Evaluator(workspacePath: Path,
targetDestPath: Option[Path]) = {
targetDestPath.foreach(rm)
- var terminalResult: JsValue = null
+ var terminalResult: upickle.Js.Value = null
val newEvaluated = mutable.Buffer.empty[Task[_]]
val newResults = mutable.LinkedHashMap.empty[Task[_], Any]
for (target <- group.items if !results.contains(target)) {
@@ -114,8 +112,8 @@ class Evaluator(workspacePath: Path,
for(targetLabel <- labeling.get(target)){
terminalResult = targetLabel
.format
- .asInstanceOf[Format[Any]]
- .writes(res.asInstanceOf[Any])
+ .asInstanceOf[upickle.default.ReadWriter[Any]]
+ .write(res.asInstanceOf[Any])
}
newResults(target) = res
}
diff --git a/core/src/main/scala/mill/eval/PathRef.scala b/core/src/main/scala/mill/eval/PathRef.scala
index 5f7efe89..fa373b5a 100644
--- a/core/src/main/scala/mill/eval/PathRef.scala
+++ b/core/src/main/scala/mill/eval/PathRef.scala
@@ -8,7 +8,6 @@ import java.security.MessageDigest
import ammonite.ops.Path
import mill.util.JsonFormatters
-import play.api.libs.json.{Format, Json}
/**
@@ -55,6 +54,6 @@ case class PathRef(path: ammonite.ops.Path){
}
object PathRef{
- private implicit val pathFormat: Format[Path] = JsonFormatters.pathFormat
- implicit def jsonFormatter: Format[PathRef] = Json.format
+ private implicit val pathFormat: upickle.default.ReadWriter[Path] = JsonFormatters.pathReadWrite
+ implicit def jsonFormatter: upickle.default.ReadWriter[PathRef] = upickle.default.macroRW
}
diff --git a/core/src/main/scala/mill/package.scala b/core/src/main/scala/mill/package.scala
index 3d713b2a..81d87426 100644
--- a/core/src/main/scala/mill/package.scala
+++ b/core/src/main/scala/mill/package.scala
@@ -5,4 +5,5 @@ package object mill extends JsonFormatters{
type T[T] = define.Task[T]
val PathRef = mill.eval.PathRef
type PathRef = mill.eval.PathRef
+
}
diff --git a/core/src/main/scala/mill/util/JsonFormatters.scala b/core/src/main/scala/mill/util/JsonFormatters.scala
index f3420448..bce23468 100644
--- a/core/src/main/scala/mill/util/JsonFormatters.scala
+++ b/core/src/main/scala/mill/util/JsonFormatters.scala
@@ -1,47 +1,28 @@
package mill.util
import ammonite.ops.{Bytes, Path}
-import play.api.libs.json._
+
object JsonFormatters extends JsonFormatters
trait JsonFormatters {
- implicit object pathFormat extends Format[ammonite.ops.Path]{
- def reads(json: JsValue) = json match{
- case JsString(v) => JsSuccess(Path(v))
- case _ => JsError("Paths must be a String")
- }
- def writes(o: Path) = JsString(o.toString)
- }
+ implicit def readWriter[T: upickle.default.Reader: upickle.default.Writer] =
+ upickle.default.ReadWriter(
+ implicitly[upickle.default.Writer[T]].write,
+ implicitly[upickle.default.Reader[T]].read,
+ )
+ implicit val pathReadWrite = upickle.default.ReadWriter[ammonite.ops.Path](
+ o => upickle.Js.Str(o.toString()),
+ {case upickle.Js.Str(json) => Path(json)},
+ )
- implicit object bytesFormat extends Format[Bytes]{
- def reads(json: JsValue) = json match{
- case JsString(v) => JsSuccess(
- new Bytes(javax.xml.bind.DatatypeConverter.parseBase64Binary(v))
- )
- case _ => JsError("Bytes must be a String")
- }
- def writes(o: Bytes) = {
- JsString(javax.xml.bind.DatatypeConverter.printBase64Binary(o.array))
- }
- }
+ implicit val bytesReadWrite = upickle.default.ReadWriter[Bytes](
+ o => upickle.Js.Str(javax.xml.bind.DatatypeConverter.printBase64Binary(o.array)),
+ {case upickle.Js.Str(json) => new Bytes(javax.xml.bind.DatatypeConverter.parseBase64Binary(json))}
+ )
- implicit def EitherFormat[T: Format, V: Format] = new Format[Either[T, V]]{
- def reads(json: JsValue) = json match{
- case JsObject(struct) =>
- (struct.get("type"), struct.get("value")) match{
- case (Some(JsString("Left")), Some(v)) => implicitly[Reads[T]].reads(v).map(Left(_))
- case (Some(JsString("Right")), Some(v)) => implicitly[Reads[V]].reads(v).map(Right(_))
- case _ => JsError("Either object layout is unknown")
- }
- case _ => JsError("Either must be an Object")
- }
- def writes(o: Either[T, V]) = o match{
- case Left(v) => Json.obj("type" -> "Left", "value" -> implicitly[Writes[T]].writes(v))
- case Right(v) => Json.obj("type" -> "Right", "value" -> implicitly[Writes[V]].writes(v))
- }
- }
- implicit lazy val crFormat: Format[ammonite.ops.CommandResult] = Json.format
- implicit lazy val modFormat: Format[coursier.Module] = Json.format
- implicit lazy val depFormat: Format[coursier.Dependency]= Json.format
- implicit lazy val attrFormat: Format[coursier.Attributes] = Json.format
+ implicit lazy val crFormat: upickle.default.ReadWriter[ammonite.ops.CommandResult] =
+ upickle.default.macroRW
+ implicit lazy val modFormat: upickle.default.ReadWriter[coursier.Module] = upickle.default.macroRW
+ implicit lazy val depFormat: upickle.default.ReadWriter[coursier.Dependency]= upickle.default.macroRW
+ implicit lazy val attrFormat: upickle.default.ReadWriter[coursier.Attributes] = upickle.default.macroRW
}
diff --git a/core/src/main/scala/mill/util/OSet.scala b/core/src/main/scala/mill/util/OSet.scala
index a1f59a22..82f5299b 100644
--- a/core/src/main/scala/mill/util/OSet.scala
+++ b/core/src/main/scala/mill/util/OSet.scala
@@ -1,7 +1,6 @@
package mill.util
-import play.api.libs.json._
import scala.collection.mutable
@@ -22,14 +21,11 @@ trait OSet[V] extends TraversableOnce[V]{
}
object OSet{
- implicit def jsonFormat[T: Format]: Format[OSet[T]] = new Format[OSet[T]] {
- def writes(o: OSet[T]) = JsArray(o.items.map(implicitly[Format[T]].writes))
-
- def reads(json: JsValue) = json match{
- case x: JsArray => implicitly[Format[Seq[T]]].reads(x).map(OSet.from)
- case _ => JsError("OSet needs to be an Array")
- }
- }
+ implicit def jsonFormat[T: upickle.default.ReadWriter]: upickle.default.ReadWriter[OSet[T]] =
+ upickle.default.ReadWriter[OSet[T]] (
+ oset => upickle.default.writeJs(oset.toList),
+ {case json => OSet.from(upickle.default.readJs[Seq[T]](json))}
+ )
def apply[V](items: V*) = from(items)
def from[V](items: TraversableOnce[V]): OSet[V] = {
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala b/scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala
index 57c881c8..9ccb9da7 100644
--- a/scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala
+++ b/scalaplugin/src/main/scala/mill/scalaplugin/Dep.scala
@@ -1,7 +1,6 @@
package mill.scalaplugin
-import play.api.libs.json._
-import mill.util.JsonFormatters._
+
sealed trait Dep
object Dep{
def apply(org: String, name: String, version: String): Dep = {
@@ -27,24 +26,5 @@ object Dep{
Point(coursier.Dependency(coursier.Module(org, name), version))
}
}
- implicit def formatter: Format[Dep] = new Format[Dep]{
- def writes(o: Dep) = o match{
- case Java(dep) => Json.obj("Java" -> Json.toJson(dep))
- case Scala(dep) => Json.obj("Scala" -> Json.toJson(dep))
- case Point(dep) => Json.obj("PointScala" -> Json.toJson(dep))
- }
-
- def reads(json: JsValue) = json match{
- case obj: JsObject =>
- obj.fields match{
- case Seq(("Java", dep)) => Json.fromJson[coursier.Dependency](dep).map(Java(_))
- case Seq(("Scala", dep)) => Json.fromJson[coursier.Dependency](dep).map(Scala(_))
- case Seq(("PointScala", dep)) => Json.fromJson[coursier.Dependency](dep).map(Point(_))
- case _ => JsError("Invalid JSON object to parse ScalaDep")
- }
-
-
- case _ => JsError("Expected JSON object to parse ScalaDep")
- }
- }
+ implicit def formatter = upickle.default.macroRW[Dep]
} \ No newline at end of file