【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )

举报
韩曙亮 发表于 2022/01/10 23:23:50 2022/01/10
【摘要】 文章目录 一、注解处理器 依赖 编译时注解二、设置 注解处理器 支持的注解类型三、设置 注解处理器 支持的 Java 版本四、博客资源 Android APT 学习进阶路径 : 推荐按照...


Android APT 学习进阶路径 : 推荐按照顺序阅读 , 从零基础到开发简易 ButterKnife 注解框架的学习路径 ;


上一篇博客 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 中 开始开发 AbstractProcessor 注解处理器类 , 使用 com.google.auto.service:auto-service:1.0-rc4 Google 服务库提供的 @AutoService(Processor.class) 注解标注该 注解处理器 类 , 简单介绍了 init 方法 , 以及在该方法中获取 FilerMessager 工具类 ;





一、注解处理器 依赖 编译时注解



注解处理器 需要处理 编译时注解 , 因此必须能够拿到 编译时注解 的引用 , 注解处理器 Module 需要依赖 编译时注解 Module ;

在 注解处理器 Module 的 build.gradle 的 dependencies 依赖中添加 implementation project(path: ':annotation') 依赖 ;


plugins {
    id 'java-library'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':annotation')
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'
    compileOnly 'com.google.auto.service:auto-service:1.0-rc3'
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15




二、设置 注解处理器 支持的注解类型



注解处理器 抽象类 AbstractProcessor 中的 getSupportedAnnotationTypes 方法 , 用于声明 注解处理器 要处理的注解类型 ;

@AutoService(Processor.class)
public class Compiler extends AbstractProcessor {
    @Override
    public Set<String> getSupportedAnnotationTypes() {
        return super.getSupportedAnnotationTypes();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

该方法的返回值是 Set<String> , 因此可以设置多个处理的 注解类型 ;

在 getSupportedAnnotationTypes 方法中构造一个 Set<String> 集合 , 向其中放置要解析注解的全类名字符串 ;

@AutoService(Processor.class)
public class Compiler extends AbstractProcessor {
    /**
     * 声明 注解处理器 要处理的注解类型
     * @return
     */
    @Override
    public Set<String> getSupportedAnnotationTypes() {
        Set<String> supportedAnnotationTypes = new HashSet<String>();
        // 将 BindView 全类名 kim.hsl.annotation.BinndView 放到 Set 集合中
        supportedAnnotationTypes.add(BindView.class.getCanonicalName());
        return supportedAnnotationTypes;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

设置 注解处理器 支持的注解类型 , 也可以使用 注解 的方式进行声明 ;

使用 @SupportedAnnotationTypes 注解 , 也可以声明 注解处理器 支持的注解类型 ;

@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface SupportedAnnotationTypes {
    /**
     * Returns the names of the supported annotation types.
     * @return the names of the supported annotation types
     */
    String [] value();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意 : 两种方式二选一 , 不能同时存在 ;





三、设置 注解处理器 支持的 Java 版本



注解处理器 抽象类 AbstractProcessor 中的 getSupportedSourceVersion 方法 , 用于声明 该注解处理器 支持的 Java 版本 ;

一般情况下要支持到最新的 Java 版本 ,

通过调用 ProcessingEnvironment 类的 getSourceVersion 方法 , 可以获取最新的 Java 版本 ;

@AutoService(Processor.class)
public class Compiler extends AbstractProcessor {
    /**
     * 声明支持的 JDK 版本
     * @return
     */
    @Override
    public SourceVersion getSupportedSourceVersion() {
        // 通过 ProcessingEnvironment 类获取最新的 Java 版本并返回
        return processingEnv.getSourceVersion();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

设置 注解处理器 支持的 Java 语言版本 , 也可以使用 注解 的方式进行声明 ;

使用 @SupportedSourceVersion 注解 , 也可以声明 注解处理器 支持的 Java 语言版本 ;

@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface SupportedSourceVersion {
    /**
     * Returns the latest supported source version.
     * @return the latest supported source version
     */
    SourceVersion value();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意 : 两种方式二选一 , 不能同时存在 ;





四、博客资源



博客源码 :

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/117066168

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。