= GEP-5:文件扩展名相关的 AST 转换 :icons: font .Metadata **** [horizontal,options="compact"] *编号*:: 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 的名称来过滤要处理的文件。对于第二个问题,可以使用 `META-INF/services/org.codehaus.groovy.transform.ASTTransformation` 文件,通常在此处定义全局 AST 转换。为了保持向后兼容性,建议使用以下语法 ``` #files,... ``` 使用配置文件的主要好处是: * 使用基于 AST 转换的新框架只需将其放入 classpath 即可让编译器感知要编译的文件 * 任何形式的编译器(FileSystemCompiler、Groovyc 或其他)都可以非常容易地扫描 classpath 并找到要编译的扩展名 == URL https://marc.info/?l=groovy-dev&m=126725425413269&w=2[groovy-dev: GEP 5 - 基于文件扩展名的 AST 转换] == 更新历史 1 (2010-02-16):: 从 Codehaus wiki 提取的版本 2 (2018-10-14):: 多处小调整

GEP-5