使用groovy AST Transform修改java

时间:2009-11-02 14:09:32

标签: java groovy abstract-syntax-tree

是否可以使用groovy ast转换代码来操作java类?

如果是,请举个例子。

如果不是,请说明原因。

2 个答案:

答案 0 :(得分:5)

是的,可以将Groovy AST Transformations与Java代码一起使用。 Groovy编译为java字节码并构建在Java库上。两种语言之间的互操作性非常好。

groovy网站上有一整节涵盖了AST Transformations

以下是混合Java / Groovy应用程序的示例。您有一个标准的Java接口和实现。 groovy类使用@Delegate AST转换,也使用invokeMethod。

Java类:

interface IFoo {
    public String someMethod(String arg1);
}

class Foo implements IFoo {
    public String someMethod(String arg1) { 
        arg1+arg1;
    }
}

Groovy类:

class Bar implements IFoo {
    @Delegate Foo foo = new Foo()
    def otherMethod() {
        someMethod("abcdef")
    }
}

执行新的Bar()。otherMethod()将返回'abcdefabcdef'。

答案 1 :(得分:0)

也许。您的第一个问题是找到一个为您提供AST的Java编译器。试试Eclipse编译器;在这里,您只需要将所有类型映射到Groovy AST转换器所期望的类型。鸭子打字会有所帮助,但前提是两个AST包含兼容的信息(我怀疑)。

之后,您需要找到一种方法在生成字节码之前从编译器获取AST,然后将修改后的AST注入编译器再次得到字节码。

总而言之,可能并非不可能,但需要一些工作。