From a907887158a469b6a21d027fd37bc360e9009b2f Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Thu, 22 May 2014 22:21:10 +0200 Subject: adds MacroPlugin.pluginsIsBlackbox This is an important omission in the current macro plugin API, which was designed before the blackbox vs whitebox separation was implemented. Even if one overrides pluginsTypedMacroBody and pluginsMacroExpand, that would still be not enough to write a custom macro expander, because typedImplicit1 uses isBlackbox, which is tightly coupled with the standard way of reading/writing macro signatures. --- .../run/macroPlugins-isBlackbox/Macros_2.scala | 11 +++++++++++ .../run/macroPlugins-isBlackbox/Plugin_1.scala | 21 +++++++++++++++++++++ test/files/run/macroPlugins-isBlackbox/Test_3.flags | 1 + test/files/run/macroPlugins-isBlackbox/Test_3.scala | 3 +++ .../run/macroPlugins-isBlackbox/scalac-plugin.xml | 4 ++++ 5 files changed, 40 insertions(+) create mode 100644 test/files/run/macroPlugins-isBlackbox/Macros_2.scala create mode 100644 test/files/run/macroPlugins-isBlackbox/Plugin_1.scala create mode 100644 test/files/run/macroPlugins-isBlackbox/Test_3.flags create mode 100644 test/files/run/macroPlugins-isBlackbox/Test_3.scala create mode 100644 test/files/run/macroPlugins-isBlackbox/scalac-plugin.xml (limited to 'test/files/run/macroPlugins-isBlackbox') diff --git a/test/files/run/macroPlugins-isBlackbox/Macros_2.scala b/test/files/run/macroPlugins-isBlackbox/Macros_2.scala new file mode 100644 index 0000000000..a90dd702df --- /dev/null +++ b/test/files/run/macroPlugins-isBlackbox/Macros_2.scala @@ -0,0 +1,11 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macros { + def impl(c: Context) = { + import c.universe._ + q"42" + } + + def foo: Any = macro impl +} \ No newline at end of file diff --git a/test/files/run/macroPlugins-isBlackbox/Plugin_1.scala b/test/files/run/macroPlugins-isBlackbox/Plugin_1.scala new file mode 100644 index 0000000000..b78a18ea6a --- /dev/null +++ b/test/files/run/macroPlugins-isBlackbox/Plugin_1.scala @@ -0,0 +1,21 @@ +package isblackbox + +import scala.tools.nsc.Global +import scala.tools.nsc.plugins.{Plugin => NscPlugin} + +class Plugin(val global: Global) extends NscPlugin { + import global._ + import analyzer._ + import scala.reflect.internal.Mode + + val name = "isBlackbox" + val description = "A sample analyzer plugin that overrides isBlackbox." + val components = Nil + addMacroPlugin(MacroPlugin) + + object MacroPlugin extends MacroPlugin { + override def pluginsIsBlackbox(macroDef: Symbol): Option[Boolean] = { + Some(false) + } + } +} \ No newline at end of file diff --git a/test/files/run/macroPlugins-isBlackbox/Test_3.flags b/test/files/run/macroPlugins-isBlackbox/Test_3.flags new file mode 100644 index 0000000000..966df731d0 --- /dev/null +++ b/test/files/run/macroPlugins-isBlackbox/Test_3.flags @@ -0,0 +1 @@ +-Xplugin:. \ No newline at end of file diff --git a/test/files/run/macroPlugins-isBlackbox/Test_3.scala b/test/files/run/macroPlugins-isBlackbox/Test_3.scala new file mode 100644 index 0000000000..552e888143 --- /dev/null +++ b/test/files/run/macroPlugins-isBlackbox/Test_3.scala @@ -0,0 +1,3 @@ +object Test extends App { + val x: Int = Macros.foo +} \ No newline at end of file diff --git a/test/files/run/macroPlugins-isBlackbox/scalac-plugin.xml b/test/files/run/macroPlugins-isBlackbox/scalac-plugin.xml new file mode 100644 index 0000000000..09b9c14648 --- /dev/null +++ b/test/files/run/macroPlugins-isBlackbox/scalac-plugin.xml @@ -0,0 +1,4 @@ + + is-blackbox + isblackbox.Plugin + \ No newline at end of file -- cgit v1.2.3