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) {
......
}
}
複製代碼
注意學習