美文网首页
AbstractProcessor 方法介绍

AbstractProcessor 方法介绍

作者: 子丿龙 | 来源:发表于2019-07-20 07:48 被阅读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 {
            // 省略具体代码
        }
    

    相关文章

      网友评论

          本文标题:AbstractProcessor 方法介绍

          本文链接:https://www.haomeiwen.com/subject/zfhylctx.html