diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 4972c2aee..e88f2a811 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -374,6 +374,7 @@ object Defaults extends BuildCommon { } ) + // This is included into JvmPlugin.projectSettings def compileBase = inTask(console)(compilersSetting :: Nil) ++ compileBaseGlobal ++ Seq( incOptions := incOptions.value .withClassfileManagerType( @@ -381,15 +382,8 @@ object Defaults extends BuildCommon { .of(crossTarget.value / "classes.bak", sbt.util.Logger.Null): ClassFileManagerType).toOptional ), scalaInstance := scalaInstanceTask.value, - crossVersion := (if (crossPaths.value) CrossVersion.binary else Disabled()), - scalaVersion := { - val scalaV = scalaVersion.value - val sv = (sbtBinaryVersion in pluginCrossBuild).value - val isPlugin = sbtPlugin.value - if (isPlugin) { - scalaVersionFromSbtBinaryVersion(sv) - } else scalaV - }, + crossVersion := (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled), + scalaVersion := PluginCross.scalaVersionSetting.value, sbtBinaryVersion in pluginCrossBuild := binarySbtVersion( (sbtVersion in pluginCrossBuild).value), crossSbtVersions := Vector((sbtVersion in pluginCrossBuild).value), @@ -426,14 +420,6 @@ object Defaults extends BuildCommon { derive(scalaBinaryVersion := binaryScalaVersion(scalaVersion.value)) )) - private[sbt] def scalaVersionFromSbtBinaryVersion(sv: String): String = - VersionNumber(sv) match { - case VersionNumber(Seq(0, 12, _*), _, _) => "2.9.2" - case VersionNumber(Seq(0, 13, _*), _, _) => "2.10.6" - case VersionNumber(Seq(1, _, _*), _, _) => "2.12.2" - case _ => sys.error(s"Unsupported sbt binary version: $sv") - } - def makeCrossSources(scalaSrcDir: File, javaSrcDir: File, sv: String, diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index d39e1acac..8fb2d27ed 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -15,6 +15,9 @@ import Def.ScopedKey import sbt.internal.Load import sbt.internal.CommandStrings._ import Cross.{ spacedFirst, requireSession } +import sbt.librarymanagement.Configurations._ +import sbt.librarymanagement.VersionNumber +import Project.inConfig /** * Module responsible for plugin cross building. @@ -42,7 +45,10 @@ private[sbt] object PluginCross { val x = Project.extract(state) import x._ state.log.info(s"Setting `sbtVersion in pluginCrossBuild` to $version") - val add = (sbtVersion in GlobalScope in pluginCrossBuild :== version) :: Nil + val add = List(sbtVersion in GlobalScope in pluginCrossBuild :== version) ++ + inConfig(Compile)(List(scalaVersion := scalaVersionSetting.value)) ++ + inConfig(Test)(List(scalaVersion := scalaVersionSetting.value)) + val cleared = session.mergeSettings.filterNot(crossExclude) val newStructure = Load.reapply(cleared ++ add, structure) Project.setProject(session, newStructure, command :: state) @@ -74,4 +80,20 @@ private[sbt] object PluginCross { else versions.map(PluginSwitchCommand + " " + _ + " " + command) ::: current ::: state } } + + def scalaVersionSetting: Def.Initialize[String] = Def.setting { + val scalaV = scalaVersion.value + val sv = (sbtBinaryVersion in pluginCrossBuild).value + val isPlugin = sbtPlugin.value + if (isPlugin) scalaVersionFromSbtBinaryVersion(sv) + else scalaV + } + + def scalaVersionFromSbtBinaryVersion(sv: String): String = + VersionNumber(sv) match { + case VersionNumber(Seq(0, 12, _*), _, _) => "2.9.2" + case VersionNumber(Seq(0, 13, _*), _, _) => "2.10.6" + case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.2" + case _ => sys.error(s"Unsupported sbt binary version: $sv") + } }