ast-transform修改java

uqjltbpv  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(325)

是否可以使用groovy ast转换代码来操作java类?
如果是,请举例说明。
如果没有,请说明原因。

ryevplcw

ryevplcw1#

也许 吧。您的第一个问题是找到一个java编译器,它为您提供ast。试试eclipse编译器;在这里,您只需将所有类型Map到groovy ast transformer所期望的类型。duck类型将有所帮助,但前提是两个ast包含兼容的信息(我对此表示怀疑)。
之后,您需要找到一种方法,在生成字节码之前从编译器中获取ast,然后将修改后的ast再次注入编译器中以获取字节码。
总而言之,可能不是不可能,但这需要一些工作。

htzpubme

htzpubme2#

是的,在java代码中使用groovy-ast转换是可能的。groovy编译成java字节码并构建在java库的基础上。这两种语言之间的互操作性非常好。
groovy站点上有一个完整的部分介绍了ast转换。
下面是一个混合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")
    }
}

执行new bar().othermethod()将返回'defdefdef'。

相关问题