From d3ff3fb63a59ab8899e9ad377f5a12128766cbc5 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Sat, 13 May 2017 08:01:51 -0400 Subject: [PATCH] migrate PluginTrigger and ProjectOrigin to Contraband (#3191) and move TestFramework to a non case class. --- build.sbt | 6 ++++- .../contraband-scala/sbt/PluginTrigger.scala | 18 +++++++++++++ .../contraband-scala/sbt/ProjectOrigin.scala | 19 ++++++++++++++ main/src/main/contraband/main.contra | 19 ++++++++++++++ main/src/main/scala/sbt/Plugins.scala | 5 +--- main/src/main/scala/sbt/Project.scala | 12 --------- sbt/src/main/scala/Import.scala | 2 ++ .../main/scala/sbt/test/ScriptedTests.scala | 2 +- .../src/main/scala/sbt/TestFramework.scala | 25 ++++++++++++++----- 9 files changed, 84 insertions(+), 24 deletions(-) create mode 100644 main/src/main/contraband-scala/sbt/PluginTrigger.scala create mode 100644 main/src/main/contraband-scala/sbt/ProjectOrigin.scala create mode 100644 main/src/main/contraband/main.contra diff --git a/build.sbt b/build.sbt index 1d36d038d..a884e5ef7 100644 --- a/build.sbt +++ b/build.sbt @@ -270,11 +270,15 @@ lazy val mainSettingsProj = (project in file("main-settings")) // The main integration project for sbt. It brings all of the projects together, configures them, and provides for overriding conventions. lazy val mainProj = (project in file("main")) + .enablePlugins(ContrabandPlugin) .dependsOn(actionsProj, mainSettingsProj, runProj, commandProj) .settings( testedBaseSettings, name := "Main", - libraryDependencies ++= scalaXml.value ++ Seq(launcherInterface) + libraryDependencies ++= scalaXml.value ++ Seq(launcherInterface), + managedSourceDirectories in Compile += + baseDirectory.value / "src" / "main" / "contraband-scala", + sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala" ) .configure(addSbtCompilerInterface, addSbtIO, diff --git a/main/src/main/contraband-scala/sbt/PluginTrigger.scala b/main/src/main/contraband-scala/sbt/PluginTrigger.scala new file mode 100644 index 000000000..c67d1e3e1 --- /dev/null +++ b/main/src/main/contraband-scala/sbt/PluginTrigger.scala @@ -0,0 +1,18 @@ +/** + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt +/** + * Type for AutoPlugin's trigger method. + * Determines whether an AutoPlugin will be activated for a project when the + * `requires` clause is satisfied. + */ +sealed abstract class PluginTrigger extends Serializable +object PluginTrigger { + + + case object AllRequirements extends PluginTrigger + case object NoTrigger extends PluginTrigger +} diff --git a/main/src/main/contraband-scala/sbt/ProjectOrigin.scala b/main/src/main/contraband-scala/sbt/ProjectOrigin.scala new file mode 100644 index 000000000..8242aff6c --- /dev/null +++ b/main/src/main/contraband-scala/sbt/ProjectOrigin.scala @@ -0,0 +1,19 @@ +/** + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt +/** + * Indicate whether the project was created organically, synthesized by a plugin, + * or is a "generic root" project supplied by sbt when a project doesn't exist for `file(".")`. + */ +sealed abstract class ProjectOrigin extends Serializable +object ProjectOrigin { + + + case object Organic extends ProjectOrigin + case object ExtraProject extends ProjectOrigin + case object DerivedProject extends ProjectOrigin + case object GenericRoot extends ProjectOrigin +} diff --git a/main/src/main/contraband/main.contra b/main/src/main/contraband/main.contra new file mode 100644 index 000000000..eb9e9f42c --- /dev/null +++ b/main/src/main/contraband/main.contra @@ -0,0 +1,19 @@ +package sbt +@target(Scala) + +## Indicate whether the project was created organically, synthesized by a plugin, +## or is a "generic root" project supplied by sbt when a project doesn't exist for `file(".")`. +enum ProjectOrigin { + Organic + ExtraProject + DerivedProject + GenericRoot +} + +## Type for AutoPlugin's trigger method. +## Determines whether an AutoPlugin will be activated for a project when the +## `requires` clause is satisfied. +enum PluginTrigger { + AllRequirements + NoTrigger +} diff --git a/main/src/main/scala/sbt/Plugins.scala b/main/src/main/scala/sbt/Plugins.scala index 6d497202f..67f44d4df 100644 --- a/main/src/main/scala/sbt/Plugins.scala +++ b/main/src/main/scala/sbt/Plugins.scala @@ -13,6 +13,7 @@ import Def.Setting import Plugins._ import annotation.tailrec import sbt.util.Logger +import PluginTrigger._ /** * An AutoPlugin defines a group of settings and the conditions where the settings are automatically added to a build (called "activation"). @@ -135,10 +136,6 @@ object AutoPluginException { new AutoPluginException(Plugins.translateMessage(origin), Some(origin)) } -sealed trait PluginTrigger -case object AllRequirements extends PluginTrigger -case object NoTrigger extends PluginTrigger - /** An expression that matches `AutoPlugin`s. */ sealed trait Plugins { def &&(o: Basic): Plugins diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index b9c6e165f..c1b1bc4c1 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -327,18 +327,6 @@ final case class ResolvedClasspathDependency(project: ProjectRef, configuration: final case class ClasspathDependency(project: ProjectReference, configuration: Option[String]) extends ClasspathDep[ProjectReference] -/** - * Indicate whether the project was created organically, synthesized by a plugin, - * or is a "generic root" project supplied by sbt when a project doesn't exist for `file(".")`. - */ -sealed trait ProjectOrigin -object ProjectOrigin { - case object Organic extends ProjectOrigin - case object ExtraProject extends ProjectOrigin - case object DerivedProject extends ProjectOrigin - case object GenericRoot extends ProjectOrigin -} - object Project extends ProjectExtra { private abstract class ProjectDef[PR <: ProjectReference]( diff --git a/sbt/src/main/scala/Import.scala b/sbt/src/main/scala/Import.scala index ca8575c69..e425dd1bc 100644 --- a/sbt/src/main/scala/Import.scala +++ b/sbt/src/main/scala/Import.scala @@ -16,6 +16,8 @@ trait Import { val LoggedOutput = sbt.OutputStrategy.LoggedOutput type CustomOutput = sbt.OutputStrategy.CustomOutput val CustomOutput = sbt.OutputStrategy.CustomOutput + val AllRequirements = sbt.PluginTrigger.AllRequirements + val NoTrigger = sbt.PluginTrigger.NoTrigger // sbt.testing type TestResult = sbt.protocol.testing.TestResult diff --git a/scripted/sbt/src/main/scala/sbt/test/ScriptedTests.scala b/scripted/sbt/src/main/scala/sbt/test/ScriptedTests.scala index 84faf41f3..617d94957 100644 --- a/scripted/sbt/src/main/scala/sbt/test/ScriptedTests.scala +++ b/scripted/sbt/src/main/scala/sbt/test/ScriptedTests.scala @@ -128,7 +128,7 @@ final class ScriptedTests(resourceBaseDirectory: File, s""" |import sbt._, Keys._ |object InstrumentScripted extends AutoPlugin { - | override def trigger = AllRequirements + | override def trigger = allRequirements | override def globalSettings: Seq[Setting[_]] = | Seq(commands += setUpScripted) ++ super.globalSettings | diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index e9bbe906f..8ebceb3ee 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -15,16 +15,27 @@ import sbt.io.IO import sbt.protocol.testing.TestResult object TestFrameworks { - val ScalaCheck = new TestFramework("org.scalacheck.ScalaCheckFramework") + val ScalaCheck = TestFramework("org.scalacheck.ScalaCheckFramework") val ScalaTest = - new TestFramework("org.scalatest.tools.Framework", "org.scalatest.tools.ScalaTestFramework") - val Specs = new TestFramework("org.specs.runner.SpecsFramework") + TestFramework("org.scalatest.tools.Framework", "org.scalatest.tools.ScalaTestFramework") + val Specs = TestFramework("org.specs.runner.SpecsFramework") val Specs2 = - new TestFramework("org.specs2.runner.Specs2Framework", "org.specs2.runner.SpecsFramework") - val JUnit = new TestFramework("com.novocode.junit.JUnitFramework") + TestFramework("org.specs2.runner.Specs2Framework", "org.specs2.runner.SpecsFramework") + val JUnit = TestFramework("com.novocode.junit.JUnitFramework") } -case class TestFramework(implClassNames: String*) { +final class TestFramework(val implClassNames: String*) extends Serializable { + override def equals(o: Any): Boolean = o match { + case x: TestFramework => (this.implClassNames.toList == x.implClassNames.toList) + case _ => false + } + override def hashCode: Int = { + 37 * (17 + implClassNames.##) + "TestFramework".## + } + override def toString: String = { + "TestFramework(" + implClassNames.mkString(", ") + ")" + } + @tailrec private def createFramework(loader: ClassLoader, log: ManagedLogger, @@ -108,6 +119,8 @@ final class TestRunner(delegate: Runner, listeners: Seq[TestReportListener], log } object TestFramework { + def apply(implClassNames: String*): TestFramework = new TestFramework(implClassNames: _*) + def getFingerprints(framework: Framework): Seq[Fingerprint] = framework.getClass.getMethod("fingerprints").invoke(framework) match { case fingerprints: Array[Fingerprint] => fingerprints.toList