码迷,mamicode.com
首页 > 其他好文 > 详细

调试Groovy ASTTransformation的方法

时间:2015-04-30 10:59:33      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

项目路径: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]



目标达成



调试Groovy ASTTransformation的方法

标签:

原文地址:http://my.oschina.net/u/580483/blog/408400

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!