From 96e086b1a1ab51e4d98e9346be0c7265b446c0b3 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Fri, 8 Jul 2016 03:23:20 +0100 Subject: [PATCH] AutoPlugin should require JvmPlugin by default Fixes #2082 --- main/src/main/scala/sbt/Plugins.scala | 2 +- main/src/main/scala/sbt/plugins/CorePlugin.scala | 1 + main/src/test/scala/PluginCommandTest.scala | 4 ++-- main/src/test/scala/PluginsTest.scala | 4 ++-- .../build.sbt | 14 ++++++++++++++ .../project/TestP.scala | 10 ++++++++++ .../auto-plugins-default-requires-jvmplugin/test | 4 ++++ .../sbt-test/project/auto-plugins/project/Q.scala | 7 ++++--- 8 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/build.sbt create mode 100644 sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/project/TestP.scala create mode 100644 sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/test diff --git a/main/src/main/scala/sbt/Plugins.scala b/main/src/main/scala/sbt/Plugins.scala index e990b2879..7a59849d3 100644 --- a/main/src/main/scala/sbt/Plugins.scala +++ b/main/src/main/scala/sbt/Plugins.scala @@ -71,7 +71,7 @@ abstract class AutoPlugin extends Plugins.Basic with PluginsFunctions { /** This AutoPlugin requires the plugins the [[Plugins]] matcher returned by this method. See [[trigger]]. */ - def requires: Plugins = empty + def requires: Plugins = plugins.JvmPlugin val label: String = getClass.getName.stripSuffix("$") diff --git a/main/src/main/scala/sbt/plugins/CorePlugin.scala b/main/src/main/scala/sbt/plugins/CorePlugin.scala index 272ccbea7..97cd52f40 100644 --- a/main/src/main/scala/sbt/plugins/CorePlugin.scala +++ b/main/src/main/scala/sbt/plugins/CorePlugin.scala @@ -11,6 +11,7 @@ import Def.Setting object CorePlugin extends AutoPlugin { // This is included by default override def trigger = allRequirements + override def requires = empty override lazy val projectSettings: Seq[Setting[_]] = Defaults.coreDefaultSettings diff --git a/main/src/test/scala/PluginCommandTest.scala b/main/src/test/scala/PluginCommandTest.scala index f97a35ff2..2ce29a6dd 100644 --- a/main/src/test/scala/PluginCommandTest.scala +++ b/main/src/test/scala/PluginCommandTest.scala @@ -7,11 +7,11 @@ import org.specs2.mutable.Specification import sbt.internal._ import sbt.internal.util.{ AttributeEntry, AttributeMap, ConsoleOut, GlobalLogging, MainLogging, Settings } -object PluginCommandTestPlugin0 extends AutoPlugin +object PluginCommandTestPlugin0 extends AutoPlugin { override def requires = empty } package subpackage { - object PluginCommandTestPlugin1 extends AutoPlugin + object PluginCommandTestPlugin1 extends AutoPlugin { override def requires = empty } } diff --git a/main/src/test/scala/PluginsTest.scala b/main/src/test/scala/PluginsTest.scala index 3dc1df33b..ca0947d3c 100644 --- a/main/src/test/scala/PluginsTest.scala +++ b/main/src/test/scala/PluginsTest.scala @@ -54,8 +54,8 @@ object AI lazy val deducePlugin = Plugins.deducer(allPlugins) lazy val log = Logger.Null - object A extends AutoPlugin - object B extends AutoPlugin + object A extends AutoPlugin { override def requires = empty } + object B extends AutoPlugin { override def requires = empty } object Q extends AutoPlugin { diff --git a/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/build.sbt b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/build.sbt new file mode 100644 index 000000000..d23089916 --- /dev/null +++ b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/build.sbt @@ -0,0 +1,14 @@ +val test123 = project in file(".") enablePlugins TestP settings( + resourceGenerators in Compile <+= Def.task { + streams.value.log info "resource generated in settings" + Nil + } +) + +TaskKey[Unit]("check") := { + val last = IO read (BuiltinCommands lastLogFile state.value).get + def assertContains(expectedString: String) = + if (!(last contains expectedString)) sys error s"Expected string $expectedString to be present" + assertContains("resource generated in settings") + assertContains("resource generated in plugin") +} diff --git a/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/project/TestP.scala b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/project/TestP.scala new file mode 100644 index 000000000..6efbbeaa2 --- /dev/null +++ b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/project/TestP.scala @@ -0,0 +1,10 @@ +import sbt._, syntax._, Keys._ + +object TestP extends AutoPlugin { + override def projectSettings: Seq[Setting[_]] = Seq( + resourceGenerators in Compile <+= Def.task { + streams.value.log info "resource generated in plugin" + Nil + } + ) +} diff --git a/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/test b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/test new file mode 100644 index 000000000..1a2ba7836 --- /dev/null +++ b/sbt/src/sbt-test/project/auto-plugins-default-requires-jvmplugin/test @@ -0,0 +1,4 @@ +# Test case from https://github.com/sbt/sbt/issues/2081, adapted + +> test +> check diff --git a/sbt/src/sbt-test/project/auto-plugins/project/Q.scala b/sbt/src/sbt-test/project/auto-plugins/project/Q.scala index 277f9b5c6..091e812d6 100644 --- a/sbt/src/sbt-test/project/auto-plugins/project/Q.scala +++ b/sbt/src/sbt-test/project/auto-plugins/project/Q.scala @@ -3,9 +3,9 @@ package sbttest // you need package http://stackoverflow.com/questions/9822008/ import sbt._, syntax._, Keys._ import java.util.concurrent.atomic.{AtomicInteger => AInt} - object A extends AutoPlugin - object B extends AutoPlugin - object E extends AutoPlugin + object A extends AutoPlugin { override def requires: Plugins = empty } + object B extends AutoPlugin { override def requires: Plugins = empty } + object E extends AutoPlugin { override def requires: Plugins = empty } object Imports { @@ -20,6 +20,7 @@ object Imports object OrgPlugin extends AutoPlugin { override def trigger = allRequirements + override def requires: Plugins = empty override def projectSettings = Seq( organization := "override" )