juejin.im/post/5d9096… juejin.im/post/5d909a…java
经过上面两篇文章的学习,咱们已经对AST有了初步的了解,下面能够本身编写代码来进行实战。jvm
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类。ide
compileOnly files(org.gradle.internal.jvm.Jvm.current().getToolsJar())
复制代码
若是不添加,在编译阶段会报错找不到tools.jar中的类post
@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) {
......
}
}
复制代码
注意学习