调试Groovy ASTTransformation的方法
发布时间:2020-12-14 16:47:36 所属栏目:大数据 来源:网络整理
导读:项目路径:http://git.oschina.net/ellipse/ASTSample/tree/howtodebug 1、先创建一个ASTTransformation package myastimport org.codehaus.groovy.ast.ASTNodeimport org.codehaus.groovy.control.CompilePhaseimport org.codehaus.groovy.control.SourceUn
项目路径:http://git.oschina.net/ellipse/ASTSample/tree/howtodebug 1、先创建一个ASTTransformation package myast import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.control.CompilePhase import org.codehaus.groovy.control.SourceUnit import org.codehaus.groovy.transform.ASTTransformation import org.codehaus.groovy.transform.GroovyASTTransformation /** * Created by Misty on 2015/4/30. * * 注解用来指定转换的时机 */ @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION) class MyASTTransformation implements ASTTransformation { @Override void visit(ASTNode[] nodes,SourceUnit source) { println("MyASTTransformation visit() $nodes") } }2、为局部ASTTransformation创建一个注解 package myast import org.codehaus.groovy.transform.GroovyASTTransformationClass import java.lang.annotation.Documented import java.lang.annotation.ElementType import java.lang.annotation.Retention import java.lang.annotation.RetentionPolicy import java.lang.annotation.Target /** * Created by Misty on 2015/4/30. */ @Documented @Retention(RetentionPolicy.SOURCE) @Target([ElementType.FIELD,ElementType.TYPE]) @GroovyASTTransformationClass("myast.MyASTTransformation") @interface MyAST { }3、一个调用ASTTransformation的测试类 package myast /** * Created by Misty on 2015/4/30. */ @MyAST class Person { }到此为止,一个简单的ASTTransformation就完成了,但直接调用Person是看不到输出的 package myast /** * Created by Misty on 2015/4/30. */ class FailMyASTTest { ??? ????static def main(args) { ??????? ????????new Person() ??????? // 看不到输出 ?} } 4、重头戏在这里,GroovyClassLoader发威了 package myast /** * Created by Misty on 2015/4/30. */ class MyASTTest { static def main(args) { def parent = MyASTTest.classLoader def loader = new GroovyClassLoader(parent) def gclass = loader.parseClass(new File("src/main/groovy/myast/Person.groovy")) } }此时在控制台输出 MyASTTransformation visit() [org.codehaus.groovy.ast.AnnotationNode@491666ad,myast.Person]目标达成 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |