文章目录
一、注解处理器 依赖 编译时注解
二、设置 注解处理器 支持的注解类型
三、设置 注解处理器 支持的 Java 版本
四、博客资源
Android APT 学习进阶路径 : 推荐按照顺序阅读 , 从零基础到开发简易 ButterKnife 注解框架的学习路径 ;
【Java 注解】注解简介及作用
【Java 注解】自定义注解 ( 注解属性定义与赋值 )
【Java 注解】自定义注解 ( 元注解 )
【Java 注解】自定义注解 ( 注解解析 )
【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
【Android APT】编译时技术 ( ButterKnife 原理分析 )
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
【Android APT】编译时技术 ( 开发编译时注解 )
【Android APT】注解处理器 ( 注解标注 与 初始化方法 )
上一篇博客 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 中 开始开发 AbstractProcessor 注解处理器类 , 使用 com.google.auto.service:auto-service:1.0-rc4 Google 服务库提供的 @AutoService(Processor.class) 注解标注该 注解处理器 类 , 简单介绍了 init 方法 , 以及在该方法中获取 Filer 和 Messager 工具类 ;
一、注解处理器 依赖 编译时注解
注解处理器 需要处理 编译时注解 , 因此必须能够拿到 编译时注解 的引用 , 注解处理器 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' }
二、设置 注解处理器 支持的注解类型
注解处理器 抽象类 AbstractProcessor 中的 getSupportedAnnotationTypes 方法 , 用于声明 注解处理器 要处理的注解类型 ;
@AutoService(Processor.class) public class Compiler extends AbstractProcessor { @Override public Set<String> getSupportedAnnotationTypes() { return super.getSupportedAnnotationTypes(); } }
该方法的返回值是 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; } }
设置 注解处理器 支持的注解类型 , 也可以使用 注解 的方式进行声明 ;
使用 @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(); }
注意 : 两种方式二选一 , 不能同时存在 ;
三、设置 注解处理器 支持的 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(); } }
设置 注解处理器 支持的 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(); }
注意 : 两种方式二选一 , 不能同时存在 ;
四、博客资源
博客源码 :
GitHub : https://github.com/han1202012/APT
CSDN :