问题
代码转换需要越来越多的库
- JDT
- 用于Eclipse相关开发
- read, generate, analyse and transform source code
- API和meta model难以理解
- APT(Annotation Processing Tool)
- SUN,之后由Oracle开发
- 在开源软件中广泛使用,现代化
- meta model受限, 不能进行代码转换
Spoon介绍
- 更完善的meta model
- Processor: 一次程序分析由查询和分析代码组成。在Spoon中,这一对概念在processor中实现。Processor是专用于分析一种编程元素的类。
- Factory: 创建新的程序元素,为其赋值并添加到已存在的AST上。Factory是以上功能的入口,每个factory有其自己的职责。比如CoreFactory创建空节点,CodeFactory创建一个可以打印的节点
https://fr.slideshare.net/GrardPaligot/code-transformation-with-spoon 48开始,直观对应program elements和meta model。 - Template: template可用于代码转换。这些模板会进行静态类型检查,保证生成的代码是正确的。相比于使用Factory,模板可以大量简化代码
- Query: 对于给定的AST,通过一系列filter来进行复杂的查询。
Spoon的基本用法
final SpoonAPI spoon = new Launcher();
spoon.addInputResource("/src/main/java/");
spoon.setSourceOutputDirectory("/target/");
spoon.addProcessor(new AwesomeProcessor());
spoon.run();