【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )
2022/2/8 1:16:52
本文主要是介绍【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 ),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一、ASTTransformation#visit 方法获取 Groovy 源文件
- 二、完整代码示例
- 1、Groovy 脚本 Groovy.groovy
- 2、ASTTransformation 接口实现 MyASTTransformation.groovy
- 3、配置 ASTTransformation
- 3、使用命令行进行编译时处理
一、ASTTransformation#visit 方法获取 Groovy 源文件
在 ASTTransformation#visit 方法中 , 使用 source.AST
也可以获取 AST 语法树根节点 , 使用 source.source.reader.text
可以和获取 Groovy 类源码的字符串形式 ;
- AST 语法树根节点
ASTNode[] nodes
:
[org.codehaus.groovy.ast.ModuleNode@2609b277]
- 源码
SourceUnit source
:
org.codehaus.groovy.control.SourceUnit@1fd14d74
- 使用
source.AST
获取 AST 语法树根节点 :
org.codehaus.groovy.ast.ModuleNode@2609b277
- 使用
source.source.reader.text
获取源码内容 :
class Student{ def name def hello(){ println "hello" } }
也就是说在 ASTTransformation 中的 visit 方法中 , 可以拿到任何 Groovy 脚本 , Groovy 类 , Groovy 方法 , 字段 , 属性 相关的数据 ;
二、完整代码示例
1、Groovy 脚本 Groovy.groovy
class Student{ def name def hello(){ println "hello" } } def student = new Student()
2、ASTTransformation 接口实现 MyASTTransformation.groovy
import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.control.SourceUnit import org.codehaus.groovy.transform.ASTTransformation import org.codehaus.groovy.transform.GroovyASTTransformation @GroovyASTTransformation class MyASTTransformation implements ASTTransformation { /** * 编译时处理方法 * @param nodes AST 抽象语法树节点 , 是 ASTNode 数组类型 * @param source 源单元 , 可以通过该对象拿到源文件 */ @Override void visit(ASTNode[] nodes, SourceUnit source) { println nodes println source println source.AST println source.source.reader.text } }
3、配置 ASTTransformation
创建 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\resources\META-INF\services\org.codehaus.groovy.transform.ASTTransformation
目录层级及文件 , 在文件中配置 ASTTransformation
实现类的全类名 :
MyASTTransformation
3、使用命令行进行编译时处理
首先 , 进入 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy
目录 ,
cd Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy
然后 , 编译 编译时处理类 MyASTTransformation.groovy , 将编译后的字节码文件 MyASTTransformation.class
保存到 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\classes
目录下 ,
groovyc -d classes MyASTTransformation.groovy
再后 , 打包上述编译好的字节码文件 , 存放在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\test.jar
路径 ;
jar -cf test.jar -C classes . -C resources .
最后 , 依赖 test.jar 执行 Groovy.groovy 脚本
groovy -classpath test.jar Groovy.groovy
执行结果为 :
[org.codehaus.groovy.ast.ModuleNode@2609b277] org.codehaus.groovy.control.SourceUnit@1fd14d74 org.codehaus.groovy.ast.ModuleNode@2609b277 class Student{ def name def hello(){ println "hello" } } def student = new Student()
这篇关于【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南