没有默认导入的Groovy脚本

时间:2017-06-07 19:42:46

标签: java groovy groovyshell

问题

使用Groovy default imports任何脚本都可以访问java.{lang,util,io,net}.*groovy.{lang,util}.*java.math.BigIntegerjava.math.BigDecimal而无需导入任何内容。

如果我不想要那个怎么办? 是否可以创建一个没有默认导入的GroovyShell

演示问题的示例

def importCustomizer = new ImportCustomizer()
// importCustomizer.clearImports()   <-- I wish that would exist
def configuration = new CompilerConfiguration()
configuration.addCompilationCustomizers(importCustomizer)
def binding = new Binding("Date", "today")
def shell = new GroovyShell(binding, configuration)
println shell.evaluate("Date")

打印class java.util.Date 我希望使用绑定中的today来获取Date (这只是一个例子,灵感来自this recent question)。

到目前为止我尝试了什么

使用CompilerConfigurationImportCustomizer,我只能添加更多导入,我不知道如何从干净的平板开始。

我也见过this answer(我刚刚修复了死链接),它指向where those default imports are defined,但我没有看到的方法删除导入,再次只是添加更多。

看起来我必须挂钩"Semantic Analysis" phase

  

这包括解析类,静态导入和变量范围。

使用groovyConsole确认:如果我在其中键入x=Date,则使用&#34;脚本&#34;菜单→&#34;检查AST&#34;,工具显示:

  • &#34;转换&#34;我还有x=Date
  • &#34;语义分析&#34;我看到x = java.util.Date

在那个阶段,ResolveVisitor做了它的事情(使用默认导入),我还没有办法解决这个问题。

0 个答案:

没有答案