AbstractProcessor 注解处理器相关

1. google提供了一个注册处理器的库:用于生产meta-inf信息

compile 'com.google.auto.service:auto-service:1.0-rc2'

一个注解搞定:

AutoService(Processor.class)
public class MyProcessor extends AbstractProcessor {
      ...
}

2. 项目结构:

----bindview-annotation(Java Library)
----bindview-api(Android Library)
----bindview-compiler(Java Library)
----app(Android App)

bindview-annotation 注解声明
bindview-api 调用Android SDK API
bindview-compiler 注解处理器相关
app 测试App

3. Element概念

package com.example;        // 包PackageElement

public class MyClass {      // 类TypeElement

    private int a;          // 变量VariableElement

    private Foo other;      // 变量VariableElement

    public Foo () {}        // 方法ExecuteableElement

    public void setA (      // ExecuteableElement
                int newA    // TypeElement
                ) {

    }
}

4.getname方法的区别:

总结:getName()和getCanonicalName()只有数组和内部类的表现不一样。

详细参考
以下顺序为:
getName()
getCanonicalName()
getSimpleName()

******************************** 普通类 ****************************************
com.ershuai.stu.other.TestClass
com.ershuai.stu.other.TestClass
TestClass

******************************** 普通类  List ****************************************
java.util.ArrayList
java.util.ArrayList
ArrayList

******************************* Integer.class  *****************************************
java.lang.Integer
java.lang.Integer
Integer

********************************  int .class  ****************************************
int
int
int

******************************** 普通类  array - 有区别 ****************************************
[Lcom.ershuai.stu.other.TestClass;
com.ershuai.stu.other.TestClass[]
TestClass[]

******************************** 内部类 - 有区别  ****************************************
com.ershuai.stu.other.Test0$NTestClass
com.ershuai.stu.other.Test0.NTestClass
NTestClass

Javapoet生成代码

占位符的使用

$L 啥也能占
$S for Strings
$T for Types
$N for Names(我们自己生成的方法名或者变量名等等)
这里的$T,在生成的源代码里面,也会自动导入你的类。

静态倒入

Javapoet参考

JavaFile.builder("com.example.helloworld", hello)
    .addStaticImport(hoverboard, "createNimbus")
    .addStaticImport(namedBoards, "*")
    .addStaticImport(Collections.class, "*")
    .build();

那么我们生成的类就会出现这些代码:

import static com.mattel.Hoverboard.Boards.*;
import static com.mattel.Hoverboard.createNimbus;
import static java.util.Collections.*;

你可能感兴趣的:(AbstractProcessor 注解处理器相关)