diff --git a/build.sbt b/build.sbt index b97dacd..5d5a5c3 100644 --- a/build.sbt +++ b/build.sbt @@ -5,7 +5,6 @@ val sbtScalariform = Project(projectName, file(".")) name := projectName sonatypeProfileName := organization.value version in ThisBuild := "1.8.0-SNAPSHOT" - scalaVersion := "2.10.6" licenses := Seq(("Apache-2.0", url("https://www.apache.org/licenses/LICENSE-2.0"))) homepage := scmInfo.value map (_.browseUrl) @@ -25,14 +24,15 @@ version in ThisBuild := "1.8.0-SNAPSHOT" ) ) +crossSbtVersions := Vector("0.13.16", "1.0.0-RC3") + scalacOptions ++= List( "-unchecked", "-deprecation", "-Xlint", "-language:_", - "-target:jvm-1.6", "-encoding", "UTF-8" -) +) ++ (if (scalaVersion.value startsWith "2.10.") List("-target:jvm-1.6") else List.empty) libraryDependencies += "org.scalariform" %% "scalariform" % "0.2.1" diff --git a/project/build.properties b/project/build.properties index 64317fd..c091b86 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.15 +sbt.version=0.13.16 diff --git a/src/main/scala/com/typesafe/sbt/PreferencesProtocol.scala b/src/main/scala-sbt-0.13/com/typesafe/sbt/PreferencesProtocol.scala similarity index 100% rename from src/main/scala/com/typesafe/sbt/PreferencesProtocol.scala rename to src/main/scala-sbt-0.13/com/typesafe/sbt/PreferencesProtocol.scala diff --git a/src/main/scala-sbt-0.13/com/typesafe/sbt/SbtCompat.scala b/src/main/scala-sbt-0.13/com/typesafe/sbt/SbtCompat.scala new file mode 100644 index 0000000..0bfe5a4 --- /dev/null +++ b/src/main/scala-sbt-0.13/com/typesafe/sbt/SbtCompat.scala @@ -0,0 +1,17 @@ +package com.typesafe.sbt + +import java.io.File +import sbt.{ Changed, FilesInfo } +import sbinary.Format + +object SbtCompat { + val Analysis = sbt.inc.Analysis + type UpdateFunction = sbt.FileFunction.UpdateFunction + + object FileFunction { + def cached(cacheBaseDirectory: File)(inStyle: FilesInfo.Style, outStyle: FilesInfo.Style)(action: UpdateFunction): Set[File] => Set[File] = + sbt.FileFunction.cached(cacheBaseDirectory)(inStyle, outStyle)(action) + } + + def changed[O: Equiv: Format](cacheFile: File): Changed[O] = new Changed[O](cacheFile) +} diff --git a/src/main/scala-sbt-1.0/com/typesafe/sbt/PreferencesProtocol.scala b/src/main/scala-sbt-1.0/com/typesafe/sbt/PreferencesProtocol.scala new file mode 100644 index 0000000..8e00ec4 --- /dev/null +++ b/src/main/scala-sbt-1.0/com/typesafe/sbt/PreferencesProtocol.scala @@ -0,0 +1,28 @@ +package com.typesafe.sbt + +import java.io.{ StringReader, StringWriter } +import java.util.Properties +import scalariform.formatter.preferences.{ PreferencesImporterExporter, IFormattingPreferences } +import sjsonnew.{ Builder, JsonFormat, Unbuilder } + +object PreferencesProtocol { + + implicit object PrefFormat extends JsonFormat[IFormattingPreferences] { + override def write[J](value: IFormattingPreferences, builder: Builder[J]): Unit = { + val outStream = new StringWriter() + PreferencesImporterExporter.asProperties(value).store(outStream, null) + builder.writeString(outStream.toString) + } + + override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): IFormattingPreferences = { + val properties = new Properties + jsOpt match { + case Some(js) => + val str = unbuilder.readString(js) + properties.load(new StringReader(str)) + case None => + } + PreferencesImporterExporter.getPreferences(properties) + } + } +} diff --git a/src/main/scala-sbt-1.0/com/typesafe/sbt/SbtCompat.scala b/src/main/scala-sbt-1.0/com/typesafe/sbt/SbtCompat.scala new file mode 100644 index 0000000..4d096ae --- /dev/null +++ b/src/main/scala-sbt-1.0/com/typesafe/sbt/SbtCompat.scala @@ -0,0 +1,18 @@ +package com.typesafe.sbt + +import java.io.File +import sbt.{ Changed, FileInfo } +import sbt.util.{ CacheStore, CacheStoreFactory } +import sjsonnew.JsonFormat + +object SbtCompat { + val Analysis = sbt.internal.inc.Analysis + type UpdateFunction = sbt.FileFunction.UpdateFunction + + object FileFunction { + def cached(cacheBaseDirectory: File)(inStyle: FileInfo.Style, outStyle: FileInfo.Style)(action: UpdateFunction): Set[File] => Set[File] = + sbt.FileFunction.cached(CacheStoreFactory(cacheBaseDirectory), inStyle, outStyle)(action) + } + + def changed[O: Equiv: JsonFormat](store: File): Changed[O] = new Changed[O](CacheStore(store)) +} diff --git a/src/main/scala/com/typesafe/sbt/Scalariform.scala b/src/main/scala/com/typesafe/sbt/Scalariform.scala index af568e2..67929c3 100644 --- a/src/main/scala/com/typesafe/sbt/Scalariform.scala +++ b/src/main/scala/com/typesafe/sbt/Scalariform.scala @@ -16,15 +16,15 @@ package com.typesafe.sbt -import sbt._ import sbt.Keys._ -import sbt.{ File, FileFilter, _ } +import sbt.{ File, FileFilter, FileFunction => _, _ } import scala.collection.immutable.Seq import scalariform.formatter.ScalaFormatter import scalariform.formatter.preferences.{ IFormattingPreferences, PreferencesImporterExporter } import scalariform.parser.ScalaParserException +import SbtCompat._ -private object Scalariform { +object Scalariform { def apply( preferences: IFormattingPreferences, @@ -75,7 +75,7 @@ private object Scalariform { def handleUpdate(in: ChangeReport[File], out: ChangeReport[File]) = { val files = in.modified -- in.removed - inc.Analysis.counted("Scala source", "", "s", files.size) foreach logFun + Analysis.counted("Scala source", "", "s", files.size) foreach logFun updateFun(files) files } @@ -88,7 +88,7 @@ private object Scalariform { protected def preferencesChanged(cacheDir: File): IFormattingPreferences => Boolean = { import com.typesafe.sbt.PreferencesProtocol._ - val prefChanged = new Changed[IFormattingPreferences](cacheDir) + val prefChanged = changed[IFormattingPreferences](cacheDir) prefChanged({ _ => true }, { _ => false }) }