diff --git a/build.sbt b/build.sbt index 20b5153f6..d69762670 100644 --- a/build.sbt +++ b/build.sbt @@ -4,7 +4,7 @@ import Util._ def internalPath = file("internal") def commonSettings: Seq[Setting[_]] = Seq( - scalaVersion := "2.10.5", + scalaVersion := scala211, // publishArtifact in packageDoc := false, resolvers += Resolver.typesafeIvyRepo("releases"), resolvers += Resolver.sonatypeRepo("snapshots"), diff --git a/internal/util-cache/src/main/scala/sbt/internal/util/FileInfo.scala b/internal/util-cache/src/main/scala/sbt/internal/util/FileInfo.scala index 923f13189..5f7461eae 100644 --- a/internal/util-cache/src/main/scala/sbt/internal/util/FileInfo.scala +++ b/internal/util-cache/src/main/scala/sbt/internal/util/FileInfo.scala @@ -8,31 +8,61 @@ import sbinary.{ DefaultProtocol, Format } import DefaultProtocol._ import scala.reflect.Manifest import sbt.io.Hash +import sbt.serialization._ sealed trait FileInfo extends NotNull { val file: File } +@directSubclasses(Array(classOf[FileHash], classOf[HashModifiedFileInfo])) sealed trait HashFileInfo extends FileInfo { val hash: List[Byte] } +object HashFileInfo { + implicit val pickler: Pickler[HashFileInfo] with Unpickler[HashFileInfo] = PicklerUnpickler.generate[HashFileInfo] +} +@directSubclasses(Array(classOf[FileModified], classOf[HashModifiedFileInfo])) sealed trait ModifiedFileInfo extends FileInfo { val lastModified: Long } +object ModifiedFileInfo { + implicit val pickler: Pickler[ModifiedFileInfo] with Unpickler[ModifiedFileInfo] = PicklerUnpickler.generate[ModifiedFileInfo] +} +@directSubclasses(Array(classOf[PlainFile])) sealed trait PlainFileInfo extends FileInfo { def exists: Boolean } +object PlainFileInfo { + implicit val pickler: Pickler[PlainFileInfo] with Unpickler[PlainFileInfo] = PicklerUnpickler.generate[PlainFileInfo] +} +@directSubclasses(Array(classOf[FileHashModified])) sealed trait HashModifiedFileInfo extends HashFileInfo with ModifiedFileInfo +object HashModifiedFileInfo { + implicit val pickler: Pickler[HashModifiedFileInfo] with Unpickler[HashModifiedFileInfo] = PicklerUnpickler.generate[HashModifiedFileInfo] +} -private final case class PlainFile(file: File, exists: Boolean) extends PlainFileInfo -private final case class FileHash(file: File, hash: List[Byte]) extends HashFileInfo -private final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo -private final case class FileHashModified(file: File, hash: List[Byte], lastModified: Long) extends HashModifiedFileInfo +private[sbt] final case class PlainFile(file: File, exists: Boolean) extends PlainFileInfo +private[sbt] object PlainFile { + implicit val pickler: Pickler[PlainFile] with Unpickler[PlainFile] = PicklerUnpickler.generate[PlainFile] +} +private[sbt] final case class FileHash(file: File, hash: List[Byte]) extends HashFileInfo +private[sbt] object FileHash { + implicit val pickler: Pickler[FileHash] with Unpickler[FileHash] = PicklerUnpickler.generate[FileHash] +} +private[sbt] final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo +private[sbt] object FileModified { + implicit val pickler: Pickler[FileModified] with Unpickler[FileModified] = PicklerUnpickler.generate[FileModified] +} +private[sbt] final case class FileHashModified(file: File, hash: List[Byte], lastModified: Long) extends HashModifiedFileInfo +private[sbt] object FileHashModified { + implicit val pickler: Pickler[FileHashModified] with Unpickler[FileHashModified] = PicklerUnpickler.generate[FileHashModified] +} object FileInfo { implicit def existsInputCache: InputCache[PlainFileInfo] = exists.infoInputCache implicit def modifiedInputCache: InputCache[ModifiedFileInfo] = lastModified.infoInputCache implicit def hashInputCache: InputCache[HashFileInfo] = hash.infoInputCache implicit def fullInputCache: InputCache[HashModifiedFileInfo] = full.infoInputCache + implicit val pickler: Pickler[FileInfo] with Unpickler[FileInfo] = PicklerUnpickler.generate[FileInfo] sealed trait Style { type F <: FileInfo