IntelliJ结构搜索如何检测@Deprecated缺失配套@DeprecationReason注解
实现IntelliJ自定义检查的两种可行思路
方案1:使用结构化搜索快速实现(无需开发插件)
- 按快捷键
Ctrl+Shift+A(Mac系统为Cmd+Shift+A)唤起全局动作搜索,输入Structural Search并进入对应功能页 - 选择目标语言为Java,新增搜索模板,内容填写如下:
@Deprecated $OtherAnnotations$ $TargetElement$ - 选中模板中的
$OtherAnnotations$变量,设置约束:最小出现次数为0、最大出现次数为0,表示除已明确写出的@Deprecated外,目标元素上没有其他注解(你也可以调整约束为「文本不匹配DeprecationReason」,适配目标元素上有其他无关注解的场景) - 选中模板中的
$TargetElement$变量,设置适用范围为类、方法、成员变量三类你需要覆盖的元素类型 - 保存该模板为自定义检查项,自定义告警级别和提示文案,比如
@Deprecated 必须搭配 @DeprecationReason 注解说明弃用原因,配置完成后IDEA即可自动触发对应告警
方案2:自定义IDEA插件本地检查(适合团队统一管控场景)
- 基于IntelliJ Platform SDK创建Java检查插件,自定义检查类继承
AbstractBaseJavaLocalInspectionTool基类 - 重写
visitAnnotation方法,当遍历到注解为java.lang.Deprecated时,获取该注解所属的父节点(即被修饰的类/方法/字段元素) - 遍历父节点的所有注解列表,判断是否存在你项目自定义的全限定名
xxx.xxx.DeprecationReason注解 - 如果未匹配到
@DeprecationReason注解,调用holder.registerProblem方法抛出对应告警,还可按需补充快速修复能力(比如一键生成带占位符的@DeprecationReason注解) - 插件打包后可推送至团队私有仓库,全团队统一安装启用即可实现规则强制校验
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

