From 93c06d29b1f84eece613c51273438fa9dec04a99 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 25 Jul 2017 16:58:40 -0400 Subject: [PATCH] Implement better fake formats than ??? Fixes sbt/librarymanagement#67 Fixes sbt/sbt#3288 --- .../formats/GlobalLockFormat.scala | 19 ++++++++++++++++++- .../formats/LoggerFormat.scala | 10 +++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/sbt/internal/librarymanagement/formats/GlobalLockFormat.scala b/core/src/main/scala/sbt/internal/librarymanagement/formats/GlobalLockFormat.scala index 2f4342d24..fffd9b6a8 100644 --- a/core/src/main/scala/sbt/internal/librarymanagement/formats/GlobalLockFormat.scala +++ b/core/src/main/scala/sbt/internal/librarymanagement/formats/GlobalLockFormat.scala @@ -2,7 +2,24 @@ package sbt.internal.librarymanagement.formats import sjsonnew._ import xsbti._ +import java.io.File +import java.util.concurrent.Callable +/** + * A fake JsonFormat for xsbti.GlobalLock. + * This is mostly for making IvyConfiguration serializable to JSON. + */ trait GlobalLockFormat { self: BasicJsonProtocol => - implicit lazy val GlobalLockFormat: JsonFormat[GlobalLock] = ??? + import GlobalLockFormats._ + + implicit lazy val globalLockIsoString: IsoString[GlobalLock] = + IsoString.iso(_ => "", _ => NoGlobalLock) + + implicit lazy val GlobalLockFormat: JsonFormat[GlobalLock] = implicitly +} + +private[sbt] object GlobalLockFormats { + object NoGlobalLock extends GlobalLock { + def apply[T](lockFile: File, run: Callable[T]) = run.call() + } } diff --git a/core/src/main/scala/sbt/internal/librarymanagement/formats/LoggerFormat.scala b/core/src/main/scala/sbt/internal/librarymanagement/formats/LoggerFormat.scala index b751672bd..954b48127 100644 --- a/core/src/main/scala/sbt/internal/librarymanagement/formats/LoggerFormat.scala +++ b/core/src/main/scala/sbt/internal/librarymanagement/formats/LoggerFormat.scala @@ -2,7 +2,15 @@ package sbt.internal.librarymanagement.formats import sjsonnew._ import xsbti._ +import sbt.util.Logger.Null +/** + * A fake JsonFormat for xsbti.Logger. + * This is mostly for making IvyConfiguration serializable to JSON. + */ trait LoggerFormat { self: BasicJsonProtocol => - implicit lazy val LoggerFormat: JsonFormat[Logger] = ??? + implicit lazy val xsbtiLoggerIsoString: IsoString[Logger] = + IsoString.iso(_ => "", _ => Null) + + implicit lazy val LoggerFormat: JsonFormat[Logger] = implicitly }