【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )

简介: 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )

一、编译时元编程引入


在之前的 " 【Groovy】MOP 元对象协议与元编程 " 系列博客中 , 都是围绕 MetaClass 的 " 运行时元编程 " , 其在运行时才进行相关的元编程操作 , 如方法注入 , 方法委托等 ;


在编译时也可以进行元编程操作 ;


在 Java 和 Android 中 , 可以使用 注解处理器 AbstractProcessor 实现 APT 编译时技术 , 参考 【Android APT】 专栏 ;


在 Groovy 中实现的编译时技术 , 类似于 Java 中的编译时技术 ;


二、声明需要编译时处理的类


声明一个 Student 类 , 在其中定义成员变量和成员方法 ; 之后需要在编译时处理该类 ;


class Student{
    def name
    def hello(){
        println "hello"
    }
}

三、分析 Groovy 类的 AST 语法树


参考 【Groovy】Groovy 环境搭建 ( 下载 Groovy | 安装 Groovy | 配置 Groovy 环境变量 ) 博客 , 配置环境变量后 , 执行


groovyConsole


命令 , 启动 Y:\001_DevelopTools\024_Groovy\groovy-4.0.0\bin\groovyConsole.bat 程序 , 如果在 Linux 中启动的是 groovyConsole 可执行文件 ;

image.png

启动后 , 弹出 GroovyConsole 工具如下 :

image.png

向其中拷贝 Student 类代码 ,

class Student{
    def name
    def hello(){
        println "hello"
    }
}


选择 GroovyConsole 工具菜单栏 Script 下的 Inspect AST 选项 , 分析上述 Student 类的 AST 语法树 ;

image.png

分析结果在 Groovy AST Browser 对话框中显示 ;

image.png

目录
相关文章
|
4月前
|
SQL Java 编译器
在尝试使用Groovy编译器将一个字符串编译成一个类
在尝试使用Groovy编译器将一个字符串编译成一个类【1月更文挑战第22天】【1月更文挑战第109篇】
17 1
|
8月前
|
IDE 开发工具 Android开发
Kotlin 的静态代码分析工具
Kotlin 的静态代码分析工具
105 0
|
4月前
|
JavaScript 前端开发 Java
静态语言和动态语言,解释和编译
静态语言和动态语言,解释和编译
35 1
|
Java
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
233 0
|
索引
Lua语言中编写模块的基本方法
Lua语言中编写模块的基本方法
130 0
|
存储 Java 编译器
Smali 语法解析 —— 类
Smali 语法解析 —— 类
【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )
【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )
194 0
【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(一)
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(一)
222 0
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(一)
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(二)
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(二)
142 0
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )(二)
【Groovy】编译时元编程 ( 利用注解进行 AST 语法树转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )
【Groovy】编译时元编程 ( 利用注解进行 AST 语法树转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )
359 0
【Groovy】编译时元编程 ( 利用注解进行 AST 语法树转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )