Groovy 说明是否使用“声明方法”;一串;

Groovy 说明是否使用“声明方法”;一串;,groovy,Groovy,出于DSL目的,我希望检测定义如下的方法: def "methodName"() {} 或 使用反射有什么方法可以做到这一点吗?此信息在运行时不可用。即使使用AST转换,您也无法确定该方法是使用字符串定义的 为此,您必须编写自己的AntlrParserPlugin,并使用自定义编译器配置使用它。然后,在AntlrParserPlugin的methodDef中,当解析方法名称时,可以检查名称前的字符是否为双引号。如果找到双引号,则向生成的MethodNode添加自定义注释,以便在运行时提供信

出于DSL目的,我希望检测定义如下的方法:

  def "methodName"() {}


使用反射有什么方法可以做到这一点吗?

此信息在运行时不可用。即使使用AST转换,您也无法确定该方法是使用字符串定义的


为此,您必须编写自己的
AntlrParserPlugin
,并使用自定义
编译器配置使用它。然后,在AntlrParserPlugin的methodDef中,当解析方法名称时,可以检查名称前的字符是否为双引号。如果找到双引号,则向生成的
MethodNode
添加自定义注释,以便在运行时提供信息…

而不是反射,AST转换可能是您需要注意的主题:我认为没有任何方法可以满足您的要求,只是因为Groovy对象中的
def foo(){}
def“foo”({}
之间没有区别。您可以使用反射来检测带有空格的方法,但是如果它们没有空格的话,这是没有帮助的。也许你应该解释一下你到底想做什么。谢谢你的评论。我特别尝试检测一些方法,比如JUnit3中的“test”前缀或JUnit4中的@test注释。我可以使用注释来解析它,但我想知道是否可以检测到“string”方法。我研究过Spock,它使用AST转换(它还转换代码以允许使用when:then:label),但由于我以前从未使用过AST转换,我想知道是否有一种反射方式来区分这类方法。
  def "This is another method name"() {}