GEP-5


元数据
编号

GEP-5

标题

依赖于文件扩展名的 AST 变换

版本

2

类型

功能

状态

已拒绝

评论

已采用通用编译器配置机制,并在 Groovy 1.8 中交付。

负责人

Alex Tkachman

创建日期

2010-02-26

上次修改 

2018-10-12

摘要:什么是依赖于文件扩展名的 AST 变换?

AST 变换是创建 DSL 的强大工具。目前存在两种定义 AST 变换的方法 - 通过注释和全局变换,它们应用于所有内容。此提案引入了新类型 - 变换,它仅应用于具有给定扩展名的源文件。

这种方法提供了更好的统一方式来组织包含基于 Groovy 的 DSL 的代码库。

如何实现?

有两个问题需要解决

  • 如何使 AST 变换感知扩展

  • 如何使 Groovyc 或 FileSystemCompiler 甚至 IDE 感知需要编译的额外(除 *.groovy 之外)扩展名。有趣的是,第一个问题根本不需要任何特定处理。全局 AST 变换可以使用 SourceUnit 的名称来过滤要处理的文件。

对于第二个问题,可以像通常定义全局 AST 变换那样使用文件 META-INF/services/org.codehaus.groovy.transform.ASTTransformation。为了保持向后兼容性,建议使用以下语法

#files:<ext1>,<ext2>...

使用配置文件的主要好处是

  • 使用基于 AST 的变换的新框架通过将其放入类路径中来使编译器感知要编译的文件

  • 对于任何编译器(FileSystemCompiler 或 Groovyc 或其他)来说,扫描类路径并查找要编译的扩展名非常容易

更新历史

1 (2010-02-16)

从 Codehaus wiki 中提取的版本

2 (2018-10-14)

许多小的调整