4
对于DSL目的,我想检测等被定义方法进行了声明的方法:告诉如果使用“字符串”
def "methodName"() {}
或
def "This is another method name"() {}
有没有办法做到这一点使用反射?
对于DSL目的,我想检测等被定义方法进行了声明的方法:告诉如果使用“字符串”
def "methodName"() {}
或
def "This is another method name"() {}
有没有办法做到这一点使用反射?
此信息在运行时不可用。即使使用AST转换,您也无法弄清楚该方法是使用字符串定义的。
为此,您必须编写自己的AntlrParserPlugin
并使用它自定义CompilerConfiguration
。然后在AntlrParserPlugin
的methodDef中,当解析方法的名称时,可以检查名称前的字符是否是双引号。如果找到双引号,则将自定义注释添加到生成的MethodNode
,以便信息在运行时可用...
而不是反射,AST转换可能是您需要注意的主题:http: //groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations –
我不认为有什么办法可以做你所问的,只是因为'def foo(){}'和'在Groovy对象中定义“foo”(){}'。您可以使用反射来检测具有空格的方法,但如果它们没有空格,则不会(也不会)有所帮助。也许你应该解释你实际上想要在这里做什么。 – OverZealous
感谢您的评论。我想特别检测某种方法,比如JUnit 3上的“测试”前缀或JUnit 4中的@Test注释。我可以使用注释来解决它,但我想知道是否可以检测到“字符串”方法。我研究过Spock,它使用AST转换(它也转换代码以允许when:then:labels),但由于我以前从未使用过AST转换,所以我想知道是否有反射方式来区分种方法。 – Diego