文档章节

调试Groovy ASTTransformation的方法

E
 Ellipse
发布于 2015/04/30 09:01
字数 298
阅读 300
收藏 1

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



目标达成



© 著作权归作者所有

E
粉丝 46
博文 65
码字总数 41290
作品 0
大连
程序员
私信 提问
用闭包增强注解

有没有想过在注解中使用闭包?是的,你没有看错,就是在注解中使用闭包。这可能么?然而就有人不信邪,居然把这变成了可能! 按照作者pniederw的说法,所有这些都要归结于他们在开发Spock F...

groovyland
2010/03/11
204
1
groovy学习资料收藏

groovy学习资料收藏 Xstream Deserializable Vulnerablity And Groovy(CVE-2015-3253) Apache Groovy 2.4.6 发布 Groovy阅读小注 使用Groovy语言替代JUnit为Java程序编写单元测试 使用Gro...

d_watson
2016/03/16
80
0
Android Gradle(三)Groovy快速入门指南

本文首发于微信公众号「刘望舒」 原文链接:Groovy快速入门看这篇就够了 前言 在前面我们学习了为什么现在要用Gradle?和Gradle入门前奏两篇文章,对Gradle也有了大概的了解,这篇文章我们接...

刘望舒
2018/10/10
0
0
使用Eclipse来开发调试WebBuilder项目

使用Eclipse来开发调试WebBuilder项目 下载,安装Groovy插件: 下载地址: Groovy-Eclipse 下载,安装Tomcat插件: 下载地址: Tomca-Eclipse 打开Eclipse,配置插件,如下图所示: 新建一个Java Proj...

白石
04/17
22
0
micro-mvc技术说明

micro-mvc框架,借助nhmicro框架和groovy技术使所有的controller、servicebean、dao和sql脚本都支持动态热部署和调试。 Controller层Controller层groovy中使用注解MicroUrlMapping设置url地址...

杰睿宁
2018/01/12
225
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
10
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
6
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部