juejin.cn/post/684490… juejin.cn/post/684490…
通过上面两篇文章的学习,我们已经对AST有了初步的了解,下面可以自己编写代码来进行实战。
AndroidStudio 搭建APT和AST步骤
1. 创建java-library Module
2. buile.gradle中添加依赖
implementation 'com.google.auto.service:auto-service:1.0-rc5'
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc5'
注意:auto-service在1.0-rc4以上版本,要同时使用implemetation和annotationProcessor添加引用,否则无法执行自定义的Processor类。
3. AST功能需要添加tools.jar
compileOnly files(org.gradle.internal.jvm.Jvm.current().getToolsJar())
如果不添加,在编译阶段会报错找不到tools.jar中的类
4. 编写代码
@AutoService(Processor.class)
public class CompAnnotationProcessor extends AbstractProcessor {
// AST树
private Trees trees;
private TreeMaker treeMaker;
private Names names;
@Override
public synchronized void init(ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment);
typeUtils = processingEnvironment.getTypeUtils();
messager = processingEnvironment.getMessager();
messager.printMessage(Diagnostic.Kind.NOTE, "***************** CompAnnotationProcessor init *************");
trees = Trees.instance(processingEnvironment);
Context context = ((JavacProcessingEnvironment)processingEnvironment).getContext();
names = Names.instance(context);
treeMaker = TreeMaker.instance(context);
}
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
......
}
}
注意
- 如果Module的build下没有生成javax.annotation.processing.Processor,说明Processor配置有问题。
- 日志输出,正常日志不要使用Kind.ERROR,否则会提示build失败。
- AST功能,只需要更改语法树的内容,即可更改最终生成的class内容。