AbstractProcessor 方法介绍
2019-07-20 本文已影响0人
子丿龙
1. void init(ProcessingEnvironment processingEnv)
该方法主要用于一些初始化的操作,通过该方法的参数ProcessingEnvironment可以获取一些列有用的工具类。其内部各方法解释如下:
/**
* 返回用来在元素上进行操作的某些实用工具方法的实现。<br>
*
* Elements是一个工具类,可以处理相关Element(包括ExecutableElement, PackageElement, TypeElement, TypeParameterElement, VariableElement)
*/
Elements getElementUtils();
/**
* 返回用来报告错误、警报和其他通知的 Messager。
*/
Messager getMessager();
/**
* 用来创建新源、类或辅助文件的 Filer。
*/
Filer getFiler();
/**
* 返回用来在类型上进行操作的某些实用工具方法的实现。
*/
Types getTypeUtils();
// 返回任何生成的源和类文件应该符合的源版本。
SourceVersion getSourceVersion();
// 返回当前语言环境;如果没有有效的语言环境,则返回 null。
Locale getLocale();
// 返回传递给注释处理工具的特定于 processor 的选项
Map<String, String> getOptions();
2. SourceVersion getSupportedSourceVersion()
返回此注释 Processor 支持的最新的源版本,该方法可以通过注解@SupportedSourceVersion指定。
3. Set<String> getSupportedAnnotationTypes()
返回此 Processor 支持的注释类型的名称。结果元素可能是某一受支持注释类型的规范(完全限定)名称。它也可能是 ” name.” 形式的名称,表示所有以 ” name.” 开头的规范名称的注释类型集合。最后,自身表示所有注释类型的集合,包括空集。注意,Processor 不应声明 “*”,除非它实际处理了所有文件;声明不必要的注释可能导致在某些环境中的性能下降。
4. boolean process(Set<? extends TypeElement> 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 {
// 省略具体代码
}