AbstractProcessor 方法介绍

1. void init(ProcessingEnvironment processingEnv)

该方法主要用于一些初始化的操作,通过该方法的参数ProcessingEnvironment可以获取一些列有用的工具类。其内部各方法解释如下:

    /**
     * 返回用来在元素上进行操作的某些实用工具方法的实现。
* * Elements是一个工具类,可以处理相关Element(包括ExecutableElement, PackageElement, TypeElement, TypeParameterElement, VariableElement) */ Elements getElementUtils(); /** * 返回用来报告错误、警报和其他通知的 Messager。 */ Messager getMessager(); /** * 用来创建新源、类或辅助文件的 Filer。 */ Filer getFiler(); /** * 返回用来在类型上进行操作的某些实用工具方法的实现。 */ Types getTypeUtils(); // 返回任何生成的源和类文件应该符合的源版本。 SourceVersion getSourceVersion(); // 返回当前语言环境;如果没有有效的语言环境,则返回 null。 Locale getLocale(); // 返回传递给注释处理工具的特定于 processor 的选项 Map getOptions();

2. SourceVersion getSupportedSourceVersion()

返回此注释 Processor 支持的最新的源版本,该方法可以通过注解@SupportedSourceVersion指定。

3. Set getSupportedAnnotationTypes()

返回此 Processor 支持的注释类型的名称。结果元素可能是某一受支持注释类型的规范(完全限定)名称。它也可能是 ” name.” 形式的名称,表示所有以 ” name.” 开头的规范名称的注释类型集合。最后,自身表示所有注释类型的集合,包括空集。注意,Processor 不应声明 “*”,除非它实际处理了所有文件;声明不必要的注释可能导致在某些环境中的性能下降。

4. boolean process(Set set, RoundEnvironment roundEnvironment)

注解处理器的核心方法,处理具体的注解。主要功能基本可以理解为两个

  • 获取同一个类中的所有指定注解修饰的Element;
    set参数,存放的是支持的注解类型,一般无用,我也没研究
    RoundEnvironment参数,可以通过遍历获取代码中所有通过指定注解(例如在ButterKnife中主要就是@BindeView等)修饰的Element对象。通过Element对象可以获取字段名称,字段类型以及注解元素的值。
  • 创建Java文件;
    将同一个类中通过指定注解修饰的所有Element在同一个Java文件中实现初始化,这样做的目的是让在最终依赖注入时便于操作。

5. getSupportedSourceVersion和getSupportedAnnotationTypes也可以通过给自定义的注解处理器类上添加注解指定具体值。

如下:

    @SupportedOptions()
    @SupportedAnnotationTypes()
    @SupportedSourceVersion(SourceVersion.RELEASE_8)
    public class ButterKnifeProcessor extends AbstractProcessor {
        // 省略具体代码
    }

你可能感兴趣的:(AbstractProcessor 方法介绍)