【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )

简介: 【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )

一、编译时处理 ASTTransformation 接口实现


声明 ASTTransformation 接口子类 , 并使用 @GroovyASTTransformation 注解修饰该类 ; 在实现的 void visit(ASTNode[] nodes, SourceUnit source) 方法中进行编译时处理 ;


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
    }
}



image.png


二、配置 ASTTransformation


在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\ 目录下 , 创建 resources\META-INF\services\ 目录层级 , 然后在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\resources\META-INF\services 目录下创建 org.codehaus.groovy.transform.ASTTransformation 文件 , 注意在 org.codehaus.groovy.transform.ASTTransformation 文件中写上 ASTTransformation 实现类的全类名 , 此处没有创建包 , 因此全类名是


MyASTTransformation



Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\resources\META-INF\services\org.codehaus.groovy.transform.ASTTransformation 文件内容如下 :


image.png



目录
相关文章
|
8月前
|
人工智能 自然语言处理 DataWorks
Qwen3 X DataWorks :为数据开发与分析加满Buff !
阿里云DataWorks平台正式接入Qwen3模型,支持最大235B参数量。用户可通过DataWorks Copilot智能助手调用该模型,以自然语言交互实现代码生成、优化、解释及纠错等功能,大幅提升数据开发与分析效率。Qwen3作为最新一代大语言模型,具备混合专家(MoE)和稠密(Dense)架构,适应多种应用场景,并支持MCP协议优化复杂任务处理。目前,用户可通过DataWorks Data Studio新版本体验此功能。
397 27
|
11月前
|
监控 UED
跨部门协作中的任务协调:上级管理者的高效方法
在现代企业中,跨部门协作至关重要,但常因职能差异、信息不对称和沟通不畅导致任务分配不明确、资源浪费。上级管理者需充当战略目标传达者、任务协调者、信息共享推动者及冲突调解者,通过明确职责、建立协作机制、优化信息流程、引入高效工具等策略,避免重复劳动,提升组织效率。
679 15
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现深度学习模型:智能零售与智能购物
【8月更文挑战第3天】 使用Python实现深度学习模型:智能零售与智能购物
387 2
IDEA 插件 Material Theme UI收费后 免费的办法
IDEA 插件 Material Theme UI收费后 免费的办法
1527 2
|
存储 算法 Java
深入解析Java中的ForkJoinPool:分而治之,并行处理的利器
深入解析Java中的ForkJoinPool:分而治之,并行处理的利器
|
前端开发
Access to XMLHttpRequest at ‘xxxxx‘ from origin :xxxxx has been ssss,跨域访问
Access to XMLHttpRequest at ‘xxxxx‘ from origin :xxxxx has been ssss,跨域访问
|
存储 Kubernetes 安全
Kubernetes Pod配置:从基础到高级实战技巧
Kubernetes Pod配置:从基础到高级实战技巧
536 0
|
前端开发 Java Go
vscode怎么运行程序代码的两种方法
VSCode要运行程序的代码,大致要分为两种情况而定,一种是前端的代码,另一种是后端的代码。在VSCode中,后端代码的运行,可以从VSCode打开终端,然后使用命令行工具,使用命令来运行后端代码程序,比如Python的就可以使用命令:python file.py;Golang就可以使用:go run file.go;Java的就可以使用:java file.java,具体的步骤如下
568 1
|
JavaScript Java Maven
Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开
Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开
558 0
Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开
|
Serverless C++
[C++/PTA] 计算点到直线的距离一一友元函数的应用
[C++/PTA] 计算点到直线的距离一一友元函数的应用
403 0