summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-05-20 06:32:49 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-05-20 06:32:49 -0700
commit2da0576017c05bd07d3d1f1c773119adc4c7876b (patch)
tree3cae8517a96d27c460e314367e1e291ba3955684
parent28f26fc5ee4b97657373334d910173961a91d275 (diff)
parent4ab66d1613da276712692001ed8f9f3c009736ab (diff)
downloadscala-2da0576017c05bd07d3d1f1c773119adc4c7876b.tar.gz
scala-2da0576017c05bd07d3d1f1c773119adc4c7876b.tar.bz2
scala-2da0576017c05bd07d3d1f1c773119adc4c7876b.zip
Merge pull request #2562 from som-snytt/issue/double-pluginv2.11.0-M3
SI-7494 Each plugin must only be instantiated once.
-rw-r--r--src/compiler/scala/tools/nsc/plugins/Plugin.scala11
-rw-r--r--src/partest/scala/tools/partest/nest/Runner.scala6
-rw-r--r--test/files/neg/t7494-after-terminal.check (renamed from test/pending/neg/plugin-after-terminal.check)0
-rw-r--r--test/files/neg/t7494-after-terminal/ThePlugin.scala (renamed from test/pending/neg/plugin-after-terminal/src/ThePlugin.scala)0
-rw-r--r--test/files/neg/t7494-after-terminal/sample_2.flags1
-rw-r--r--test/files/neg/t7494-after-terminal/sample_2.scala6
-rw-r--r--test/files/neg/t7494-after-terminal/scalac-plugin.xml (renamed from test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml)2
-rw-r--r--test/files/neg/t7494-before-parser.check (renamed from test/pending/neg/plugin-before-parser.check)0
-rw-r--r--test/files/neg/t7494-before-parser/ThePlugin.scala (renamed from test/pending/neg/plugin-before-parser/src/ThePlugin.scala)0
-rw-r--r--test/files/neg/t7494-before-parser/sample_2.flags1
-rw-r--r--test/files/neg/t7494-before-parser/sample_2.scala6
-rw-r--r--test/files/neg/t7494-before-parser/scalac-plugin.xml (renamed from test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml)0
-rw-r--r--test/files/neg/t7494-cyclic-dependency.check1
-rw-r--r--test/files/neg/t7494-multi-right-after.check (renamed from test/pending/neg/plugin-multiple-rafter.check)3
-rw-r--r--test/files/neg/t7494-multi-right-after/ThePlugin.scala (renamed from test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala)0
-rw-r--r--test/files/neg/t7494-multi-right-after/sample_2.flags1
-rw-r--r--test/files/neg/t7494-multi-right-after/sample_2.scala6
-rw-r--r--test/files/neg/t7494-multi-right-after/scalac-plugin.xml (renamed from test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml)2
-rw-r--r--test/files/neg/t7494-no-options.check33
-rw-r--r--test/files/neg/t7494-no-options/ploogin_1.scala31
-rw-r--r--test/files/neg/t7494-no-options/sample_2.flags1
-rw-r--r--test/files/neg/t7494-no-options/sample_2.scala6
-rw-r--r--test/files/neg/t7494-no-options/scalac-plugin.xml4
-rw-r--r--test/files/neg/t7494-right-after-before.check1
-rw-r--r--test/files/neg/t7494-right-after-before/ThePlugin.scala (renamed from test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala)0
-rw-r--r--test/files/neg/t7494-right-after-before/sample_2.flags1
-rw-r--r--test/files/neg/t7494-right-after-before/sample_2.scala6
-rw-r--r--test/files/neg/t7494-right-after-before/scalac-plugin.xml (renamed from test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml)2
-rw-r--r--test/files/neg/t7494-right-after-terminal.check (renamed from test/pending/neg/plugin-rightafter-terminal.check)0
-rw-r--r--test/files/neg/t7494-right-after-terminal/ThePlugin.scala (renamed from test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala)0
-rw-r--r--test/files/neg/t7494-right-after-terminal/sample_2.flags1
-rw-r--r--test/files/neg/t7494-right-after-terminal/sample_2.scala6
-rw-r--r--test/files/neg/t7494-right-after-terminal/scalac-plugin.xml (renamed from test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml)2
-rw-r--r--test/pending/neg/plugin-after-terminal.flags2
-rw-r--r--test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-after-terminal/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-after-terminal/testsource.scala4
-rw-r--r--test/pending/neg/plugin-before-parser.flags2
-rw-r--r--test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-before-parser/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-before-parser/testsource.scala4
-rw-r--r--test/pending/neg/plugin-cyclic-dependency.check2
-rw-r--r--test/pending/neg/plugin-cyclic-dependency.flags2
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-cyclic-dependency/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/testsource.scala4
-rw-r--r--test/pending/neg/plugin-multiple-rafter.flags2
-rw-r--r--test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-multiple-rafter/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-multiple-rafter/testsource.scala4
-rw-r--r--test/pending/neg/plugin-rafter-before-1.check2
-rw-r--r--test/pending/neg/plugin-rafter-before-1.flags2
-rw-r--r--test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-rafter-before-1/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-rafter-before-1/testsource.scala4
-rw-r--r--test/pending/neg/plugin-rightafter-terminal.flags2
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-rightafter-terminal/misc/build.sh14
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml5
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/testsource.scala4
-rw-r--r--test/pending/neg/t7494-cyclic-dependency/ThePlugin.scala (renamed from test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala)0
-rw-r--r--test/pending/neg/t7494-cyclic-dependency/sample_2.flags1
-rw-r--r--test/pending/neg/t7494-cyclic-dependency/sample_2.scala6
-rw-r--r--test/pending/neg/t7494-cyclic-dependency/scalac-plugin.xml5
64 files changed, 137 insertions, 150 deletions
diff --git a/src/compiler/scala/tools/nsc/plugins/Plugin.scala b/src/compiler/scala/tools/nsc/plugins/Plugin.scala
index b0113f7696..a584a4ed5d 100644
--- a/src/compiler/scala/tools/nsc/plugins/Plugin.scala
+++ b/src/compiler/scala/tools/nsc/plugins/Plugin.scala
@@ -93,15 +93,13 @@ object Plugin {
type AnyClass = Class[_]
/** Use a class loader to load the plugin class.
- *
- * @return `None` on failure
*/
- def load(pd: PluginDescription, loader: ClassLoader): Try[AnyClass] = {
+ def load(classname: String, loader: ClassLoader): Try[AnyClass] = {
Try[AnyClass] {
- loader loadClass pd.classname
+ loader loadClass classname
} recoverWith {
case _: Exception =>
- Failure(new RuntimeException(s"Warning: class not found: ${pd.classname}"))
+ Failure(new RuntimeException(s"Warning: class not found: ${classname}"))
}
}
@@ -137,9 +135,8 @@ object Plugin {
case _ => false
}
val (locs, pds) = ((explicit ::: exploded ::: included) filterNot ignored).unzip
-
val loader = loaderFor(locs.distinct)
- pds filter (_.isSuccess) map (_.get) map (Plugin load (_, loader))
+ (pds filter (_.isSuccess) map (_.get.classname)).distinct map (Plugin load (_, loader))
}
/** Instantiate a plugin class, given the class and
diff --git a/src/partest/scala/tools/partest/nest/Runner.scala b/src/partest/scala/tools/partest/nest/Runner.scala
index 85679ad0b8..01e4f50981 100644
--- a/src/partest/scala/tools/partest/nest/Runner.scala
+++ b/src/partest/scala/tools/partest/nest/Runner.scala
@@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit.NANOSECONDS
import scala.collection.mutable.ListBuffer
import scala.concurrent.duration.Duration
import scala.io.Codec
+import scala.reflect.internal.FatalError
import scala.sys.process.Process
import scala.tools.nsc.Properties.{ envOrElse, isWin, jdkHome, javaHome, propOrElse, propOrEmpty, setProp }
import scala.tools.nsc.{ Settings, CompilerCommand, Global }
@@ -451,9 +452,10 @@ class Runner(val testFile: File, fileManager: FileManager, val testRunParams: Te
val failing = rounds find (x => nextTestActionExpectTrue("compilation failed", x.isOk) == false)
// which means passing if it checks and didn't crash the compiler
+ // or, OK, we'll let you crash the compiler with a FatalError if you supply a check file
def checked(r: CompileRound) = r.result match {
- case f: Crash => false
- case f => normalizeLog(); diffIsOk
+ case Crash(_, t, _) if !checkFile.canRead || !t.isInstanceOf[FatalError] => false
+ case _ => normalizeLog(); diffIsOk
}
failing map (checked) getOrElse nextTestActionFailing("expected compilation failure")
diff --git a/test/pending/neg/plugin-after-terminal.check b/test/files/neg/t7494-after-terminal.check
index 096efe09cd..096efe09cd 100644
--- a/test/pending/neg/plugin-after-terminal.check
+++ b/test/files/neg/t7494-after-terminal.check
diff --git a/test/pending/neg/plugin-after-terminal/src/ThePlugin.scala b/test/files/neg/t7494-after-terminal/ThePlugin.scala
index 2a4607392f..2a4607392f 100644
--- a/test/pending/neg/plugin-after-terminal/src/ThePlugin.scala
+++ b/test/files/neg/t7494-after-terminal/ThePlugin.scala
diff --git a/test/files/neg/t7494-after-terminal/sample_2.flags b/test/files/neg/t7494-after-terminal/sample_2.flags
new file mode 100644
index 0000000000..b8a476e361
--- /dev/null
+++ b/test/files/neg/t7494-after-terminal/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:afterterminal
diff --git a/test/files/neg/t7494-after-terminal/sample_2.scala b/test/files/neg/t7494-after-terminal/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-after-terminal/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml b/test/files/neg/t7494-after-terminal/scalac-plugin.xml
index 90ff27dc2a..2558d6fd03 100644
--- a/test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml
+++ b/test/files/neg/t7494-after-terminal/scalac-plugin.xml
@@ -1,5 +1,5 @@
<plugin>
- <name>beforeparser</name>
+ <name>ignored</name>
<classname>scala.test.plugins.ThePlugin</classname>
</plugin>
diff --git a/test/pending/neg/plugin-before-parser.check b/test/files/neg/t7494-before-parser.check
index 9a407923b1..9a407923b1 100644
--- a/test/pending/neg/plugin-before-parser.check
+++ b/test/files/neg/t7494-before-parser.check
diff --git a/test/pending/neg/plugin-before-parser/src/ThePlugin.scala b/test/files/neg/t7494-before-parser/ThePlugin.scala
index 7ca896650d..7ca896650d 100644
--- a/test/pending/neg/plugin-before-parser/src/ThePlugin.scala
+++ b/test/files/neg/t7494-before-parser/ThePlugin.scala
diff --git a/test/files/neg/t7494-before-parser/sample_2.flags b/test/files/neg/t7494-before-parser/sample_2.flags
new file mode 100644
index 0000000000..0c92fc8a06
--- /dev/null
+++ b/test/files/neg/t7494-before-parser/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:beforeparser
diff --git a/test/files/neg/t7494-before-parser/sample_2.scala b/test/files/neg/t7494-before-parser/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-before-parser/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml b/test/files/neg/t7494-before-parser/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml
+++ b/test/files/neg/t7494-before-parser/scalac-plugin.xml
diff --git a/test/files/neg/t7494-cyclic-dependency.check b/test/files/neg/t7494-cyclic-dependency.check
new file mode 100644
index 0000000000..205387c3dd
--- /dev/null
+++ b/test/files/neg/t7494-cyclic-dependency.check
@@ -0,0 +1 @@
+error: Cycle in compiler phase dependencies detected, phase cyclicdependency2 reacted twice!
diff --git a/test/pending/neg/plugin-multiple-rafter.check b/test/files/neg/t7494-multi-right-after.check
index c54f884feb..9c6fdbe91f 100644
--- a/test/pending/neg/plugin-multiple-rafter.check
+++ b/test/files/neg/t7494-multi-right-after.check
@@ -1,4 +1,3 @@
-error: fatal error: Multiple phases want to run right after the phase explicitouter
+error: Multiple phases want to run right after the phase explicitouter
Phases: erasure, multi-rafter,
Re-run with -Xgenerate-phase-graph <filename> to better see the problem.
-one error found
diff --git a/test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala b/test/files/neg/t7494-multi-right-after/ThePlugin.scala
index 819176fa88..819176fa88 100644
--- a/test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala
+++ b/test/files/neg/t7494-multi-right-after/ThePlugin.scala
diff --git a/test/files/neg/t7494-multi-right-after/sample_2.flags b/test/files/neg/t7494-multi-right-after/sample_2.flags
new file mode 100644
index 0000000000..9273fb98d7
--- /dev/null
+++ b/test/files/neg/t7494-multi-right-after/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:multi-rafter
diff --git a/test/files/neg/t7494-multi-right-after/sample_2.scala b/test/files/neg/t7494-multi-right-after/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-multi-right-after/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml b/test/files/neg/t7494-multi-right-after/scalac-plugin.xml
index 90ff27dc2a..2558d6fd03 100644
--- a/test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml
+++ b/test/files/neg/t7494-multi-right-after/scalac-plugin.xml
@@ -1,5 +1,5 @@
<plugin>
- <name>beforeparser</name>
+ <name>ignored</name>
<classname>scala.test.plugins.ThePlugin</classname>
</plugin>
diff --git a/test/files/neg/t7494-no-options.check b/test/files/neg/t7494-no-options.check
new file mode 100644
index 0000000000..c197d2a671
--- /dev/null
+++ b/test/files/neg/t7494-no-options.check
@@ -0,0 +1,33 @@
+error: Error: ploogin has no options
+ phase name id description
+ ---------- -- -----------
+ parser 1 parse source into ASTs, perform simple desugaring
+ namer 2 resolve names, attach symbols to named trees
+packageobjects 3 load package objects
+ typer 4 the meat and potatoes: type the trees
+ patmat 5 translate match expressions
+superaccessors 6 add super accessors in traits and nested classes
+ extmethods 7 add extension methods for inline classes
+ pickler 8 serialize symbol tables
+ refchecks 9 reference/override checking, translate nested objects
+ uncurry 10 uncurry, translate function values to anonymous classes
+ tailcalls 11 replace tail calls by jumps
+ specialize 12 @specialized-driven class and method specialization
+ explicitouter 13 this refs to outer pointers, translate patterns
+ erasure 14 erase types, add interfaces for traits
+ posterasure 15 clean up erased inline classes
+ lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ lambdalift 17 move nested functions to top level
+ constructors 18 move field definitions into constructors
+ flatten 19 eliminate inner classes
+ mixin 20 mixin composition
+ cleanup 21 platform-specific cleanups, generate reflective calls
+ icode 22 generate portable intermediate code
+ inliner 23 optimization: do inlining
+inlinehandlers 24 optimization: inline exception handlers
+ closelim 25 optimization: eliminate uncalled closures
+ constopt 26 optimization: optimize null and other constants
+ dce 27 optimization: eliminate dead code
+ jvm 28 generate JVM bytecode
+ ploogin 29 A sample phase that does so many things it's kind of hard...
+ terminal 30 The last phase in the compiler chain
diff --git a/test/files/neg/t7494-no-options/ploogin_1.scala b/test/files/neg/t7494-no-options/ploogin_1.scala
new file mode 100644
index 0000000000..ed6adfc1cf
--- /dev/null
+++ b/test/files/neg/t7494-no-options/ploogin_1.scala
@@ -0,0 +1,31 @@
+
+package t6446
+
+import scala.tools.nsc.{ Global, Phase }
+import scala.tools.nsc.plugins.{ Plugin, PluginComponent }
+import scala.reflect.io.Path
+import scala.reflect.io.File
+
+/** A test plugin. */
+class Ploogin(val global: Global) extends Plugin {
+ import global._
+
+ val name = "ploogin"
+ val description = "A sample plugin for testing."
+ val components = List[PluginComponent](TestComponent)
+
+ private object TestComponent extends PluginComponent {
+ val global: Ploogin.this.global.type = Ploogin.this.global
+ //override val runsBefore = List("refchecks")
+ val runsAfter = List("jvm")
+ val phaseName = Ploogin.this.name
+ override def description = "A sample phase that does so many things it's kind of hard to describe briefly."
+ def newPhase(prev: Phase) = new TestPhase(prev)
+ class TestPhase(prev: Phase) extends StdPhase(prev) {
+ override def description = TestComponent.this.description
+ def apply(unit: CompilationUnit) {
+ // kewl kode
+ }
+ }
+ }
+}
diff --git a/test/files/neg/t7494-no-options/sample_2.flags b/test/files/neg/t7494-no-options/sample_2.flags
new file mode 100644
index 0000000000..7f0f7afe48
--- /dev/null
+++ b/test/files/neg/t7494-no-options/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xshow-phases -P:ploogin:inploog
diff --git a/test/files/neg/t7494-no-options/sample_2.scala b/test/files/neg/t7494-no-options/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-no-options/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/files/neg/t7494-no-options/scalac-plugin.xml b/test/files/neg/t7494-no-options/scalac-plugin.xml
new file mode 100644
index 0000000000..e849bb5919
--- /dev/null
+++ b/test/files/neg/t7494-no-options/scalac-plugin.xml
@@ -0,0 +1,4 @@
+<plugin>
+<name>sample-plugin</name>
+<classname>t6446.Ploogin</classname>
+</plugin>
diff --git a/test/files/neg/t7494-right-after-before.check b/test/files/neg/t7494-right-after-before.check
new file mode 100644
index 0000000000..9b57a7711b
--- /dev/null
+++ b/test/files/neg/t7494-right-after-before.check
@@ -0,0 +1 @@
+error: phase erasure want to run right after explicitouter, but some phase has declared to run before erasure. Re-run with -Xgenerate-phase-graph <filename> to better see the problem.
diff --git a/test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala b/test/files/neg/t7494-right-after-before/ThePlugin.scala
index 81ba85ae80..81ba85ae80 100644
--- a/test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala
+++ b/test/files/neg/t7494-right-after-before/ThePlugin.scala
diff --git a/test/files/neg/t7494-right-after-before/sample_2.flags b/test/files/neg/t7494-right-after-before/sample_2.flags
new file mode 100644
index 0000000000..97d0f5b5f6
--- /dev/null
+++ b/test/files/neg/t7494-right-after-before/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:rafter-before-1
diff --git a/test/files/neg/t7494-right-after-before/sample_2.scala b/test/files/neg/t7494-right-after-before/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-right-after-before/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml b/test/files/neg/t7494-right-after-before/scalac-plugin.xml
index 90ff27dc2a..2558d6fd03 100644
--- a/test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml
+++ b/test/files/neg/t7494-right-after-before/scalac-plugin.xml
@@ -1,5 +1,5 @@
<plugin>
- <name>beforeparser</name>
+ <name>ignored</name>
<classname>scala.test.plugins.ThePlugin</classname>
</plugin>
diff --git a/test/pending/neg/plugin-rightafter-terminal.check b/test/files/neg/t7494-right-after-terminal.check
index 6fe4f63c82..6fe4f63c82 100644
--- a/test/pending/neg/plugin-rightafter-terminal.check
+++ b/test/files/neg/t7494-right-after-terminal.check
diff --git a/test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala b/test/files/neg/t7494-right-after-terminal/ThePlugin.scala
index 9d6d30b327..9d6d30b327 100644
--- a/test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala
+++ b/test/files/neg/t7494-right-after-terminal/ThePlugin.scala
diff --git a/test/files/neg/t7494-right-after-terminal/sample_2.flags b/test/files/neg/t7494-right-after-terminal/sample_2.flags
new file mode 100644
index 0000000000..da046ba5f1
--- /dev/null
+++ b/test/files/neg/t7494-right-after-terminal/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:rightafterterminal
diff --git a/test/files/neg/t7494-right-after-terminal/sample_2.scala b/test/files/neg/t7494-right-after-terminal/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/files/neg/t7494-right-after-terminal/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml b/test/files/neg/t7494-right-after-terminal/scalac-plugin.xml
index 90ff27dc2a..2558d6fd03 100644
--- a/test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml
+++ b/test/files/neg/t7494-right-after-terminal/scalac-plugin.xml
@@ -1,5 +1,5 @@
<plugin>
- <name>beforeparser</name>
+ <name>ignored</name>
<classname>scala.test.plugins.ThePlugin</classname>
</plugin>
diff --git a/test/pending/neg/plugin-after-terminal.flags b/test/pending/neg/plugin-after-terminal.flags
deleted file mode 100644
index 6a44376213..0000000000
--- a/test/pending/neg/plugin-after-terminal.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-after-terminal/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 3e382f3a12..0000000000
--- a/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f174c50c4363c492362a05c72dd45b0da18fdcd8 ?plugins.jar
diff --git a/test/pending/neg/plugin-after-terminal/misc/build.sh b/test/pending/neg/plugin-after-terminal/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-after-terminal/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-after-terminal/testsource.scala b/test/pending/neg/plugin-after-terminal/testsource.scala
deleted file mode 100644
index 519d162fdf..0000000000
--- a/test/pending/neg/plugin-after-terminal/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("afterterminal")
-}
-
diff --git a/test/pending/neg/plugin-before-parser.flags b/test/pending/neg/plugin-before-parser.flags
deleted file mode 100644
index 632530922c..0000000000
--- a/test/pending/neg/plugin-before-parser.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-before-parser/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
deleted file mode 100644
index e82eed76ce..0000000000
--- a/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d7b100ad483484b598b7cd643424bd2e33898a0d ?plugins.jar
diff --git a/test/pending/neg/plugin-before-parser/misc/build.sh b/test/pending/neg/plugin-before-parser/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-before-parser/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-before-parser/testsource.scala b/test/pending/neg/plugin-before-parser/testsource.scala
deleted file mode 100644
index 9928aaa83c..0000000000
--- a/test/pending/neg/plugin-before-parser/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("beforeparser")
-}
-
diff --git a/test/pending/neg/plugin-cyclic-dependency.check b/test/pending/neg/plugin-cyclic-dependency.check
deleted file mode 100644
index a29bc3f5be..0000000000
--- a/test/pending/neg/plugin-cyclic-dependency.check
+++ /dev/null
@@ -1,2 +0,0 @@
-error: fatal error: Cycle in compiler phase dependencies detected, phase cyclicdependency1 reacted twice!
-one error found
diff --git a/test/pending/neg/plugin-cyclic-dependency.flags b/test/pending/neg/plugin-cyclic-dependency.flags
deleted file mode 100644
index 8716aaa65f..0000000000
--- a/test/pending/neg/plugin-cyclic-dependency.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-cyclic-dependency/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 7e565e9e61..0000000000
--- a/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7e6be9e33a87194e7061f94f6be115619f91ada2 ?plugins.jar
diff --git a/test/pending/neg/plugin-cyclic-dependency/misc/build.sh b/test/pending/neg/plugin-cyclic-dependency/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-cyclic-dependency/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-cyclic-dependency/testsource.scala b/test/pending/neg/plugin-cyclic-dependency/testsource.scala
deleted file mode 100644
index f1513ec9a0..0000000000
--- a/test/pending/neg/plugin-cyclic-dependency/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("cyclicdependency")
-}
-
diff --git a/test/pending/neg/plugin-multiple-rafter.flags b/test/pending/neg/plugin-multiple-rafter.flags
deleted file mode 100644
index dcae7f2f96..0000000000
--- a/test/pending/neg/plugin-multiple-rafter.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-multiple-rafter/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
deleted file mode 100644
index f4905fcbd4..0000000000
--- a/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2bda582b574287429ad5ee2e1d9a3effc88b0a5f ?plugins.jar
diff --git a/test/pending/neg/plugin-multiple-rafter/misc/build.sh b/test/pending/neg/plugin-multiple-rafter/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-multiple-rafter/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-multiple-rafter/testsource.scala b/test/pending/neg/plugin-multiple-rafter/testsource.scala
deleted file mode 100644
index f73db1eb60..0000000000
--- a/test/pending/neg/plugin-multiple-rafter/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("multi-rafter")
-}
-
diff --git a/test/pending/neg/plugin-rafter-before-1.check b/test/pending/neg/plugin-rafter-before-1.check
deleted file mode 100644
index 19ed4d2fba..0000000000
--- a/test/pending/neg/plugin-rafter-before-1.check
+++ /dev/null
@@ -1,2 +0,0 @@
-error: fatal error: phase erasure want to run right after explicitouter, but some phase has declared to run before erasure. Re-run with -Xgenerate-phase-graph <filename> to better see the problem.
-one error found
diff --git a/test/pending/neg/plugin-rafter-before-1.flags b/test/pending/neg/plugin-rafter-before-1.flags
deleted file mode 100644
index 8bf03145b9..0000000000
--- a/test/pending/neg/plugin-rafter-before-1.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-rafter-before-1/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 8ad591b6ea..0000000000
--- a/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-af91fd67ccef349e7f8ea662615e17796a339485 ?plugins.jar
diff --git a/test/pending/neg/plugin-rafter-before-1/misc/build.sh b/test/pending/neg/plugin-rafter-before-1/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-rafter-before-1/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-rafter-before-1/testsource.scala b/test/pending/neg/plugin-rafter-before-1/testsource.scala
deleted file mode 100644
index 836459db22..0000000000
--- a/test/pending/neg/plugin-rafter-before-1/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("rafter-before-1")
-}
-
diff --git a/test/pending/neg/plugin-rightafter-terminal.flags b/test/pending/neg/plugin-rightafter-terminal.flags
deleted file mode 100644
index 948a318668..0000000000
--- a/test/pending/neg/plugin-rightafter-terminal.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--Xplugin:files/neg/plugin-rightafter-terminal/lib/plugins.jar
-
diff --git a/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
deleted file mode 100644
index c2e2b9cd43..0000000000
--- a/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cccde4914da2058dca893783c231cda23855603 ?plugins.jar
diff --git a/test/pending/neg/plugin-rightafter-terminal/misc/build.sh b/test/pending/neg/plugin-rightafter-terminal/misc/build.sh
deleted file mode 100755
index 8899009d7f..0000000000
--- a/test/pending/neg/plugin-rightafter-terminal/misc/build.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-SCALAC="../../../../build/pack/bin/scalac -deprecation -cp ../../../../build/quick/classes/compiler/"
-
-BASE=`pwd`
-
-if [[ -d "${BASE}/src" ]] ; then
-
- mkdir -p build
- ${SCALAC} -d build src/*.scala
- jar cf lib/plugins.jar -C misc/ scalac-plugin.xml -C build .
- rm -rf build
-fi
-
diff --git a/test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml b/test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml
deleted file mode 100644
index 90ff27dc2a..0000000000
--- a/test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<plugin>
- <name>beforeparser</name>
- <classname>scala.test.plugins.ThePlugin</classname>
-</plugin>
-
diff --git a/test/pending/neg/plugin-rightafter-terminal/testsource.scala b/test/pending/neg/plugin-rightafter-terminal/testsource.scala
deleted file mode 100644
index 7af767b638..0000000000
--- a/test/pending/neg/plugin-rightafter-terminal/testsource.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- println("rightafterterminal")
-}
-
diff --git a/test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala b/test/pending/neg/t7494-cyclic-dependency/ThePlugin.scala
index bd94ce60d7..bd94ce60d7 100644
--- a/test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala
+++ b/test/pending/neg/t7494-cyclic-dependency/ThePlugin.scala
diff --git a/test/pending/neg/t7494-cyclic-dependency/sample_2.flags b/test/pending/neg/t7494-cyclic-dependency/sample_2.flags
new file mode 100644
index 0000000000..db25b88a12
--- /dev/null
+++ b/test/pending/neg/t7494-cyclic-dependency/sample_2.flags
@@ -0,0 +1 @@
+-Xplugin:. -Xplugin-require:cyclicdependency
diff --git a/test/pending/neg/t7494-cyclic-dependency/sample_2.scala b/test/pending/neg/t7494-cyclic-dependency/sample_2.scala
new file mode 100644
index 0000000000..73cdc64e40
--- /dev/null
+++ b/test/pending/neg/t7494-cyclic-dependency/sample_2.scala
@@ -0,0 +1,6 @@
+
+package sample
+
+// just a sample that is compiled with the sample plugin enabled
+object Sample extends App {
+}
diff --git a/test/pending/neg/t7494-cyclic-dependency/scalac-plugin.xml b/test/pending/neg/t7494-cyclic-dependency/scalac-plugin.xml
new file mode 100644
index 0000000000..2558d6fd03
--- /dev/null
+++ b/test/pending/neg/t7494-cyclic-dependency/scalac-plugin.xml
@@ -0,0 +1,5 @@
+<plugin>
+ <name>ignored</name>
+ <classname>scala.test.plugins.ThePlugin</classname>
+</plugin>
+