如何要求调用Kotlin函数myFunction时必须添加@MyCustomAnnotation并触发警告
问题
我已经定义了如下自定义注解类:
@Target(AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class MyCustomAnnotation
以及函数:
fun myFunction() { // 代码逻辑 }
请问如何实现:在编码时调用myFunction()必须添加@MyCustomAnnotation,若未添加则显示警告并提供添加注解的快速修复选项(类似常见的代码警告提示框),期望的正确调用形式为:
@MyCustomAnnotation myFunction()
解决方案
方法一:使用IntelliJ IDEA自定义静态代码检查(推荐)
IntelliJ IDEA自带的结构搜索检查可以快速实现这个需求,步骤如下:
打开检查配置面板
- Windows/Linux:点击
File > Settings > Editor > Inspections - Mac:点击
IntelliJ IDEA > Settings > Editor > Inspections - 在左侧列表展开
Kotlin > General,点击右侧的+按钮,选择Add Custom Inspection
- Windows/Linux:点击
配置检查规则
- 选择
Structural Search Inspection类型,设置检查名称(比如“调用myFunction未添加@MyCustomAnnotation”),将严重程度设为Warning - 点击
Edit Template,输入匹配模板:myFunction() - 点击
Add Constraint,选择Occurrences count并设为1;再添加Not within约束,选择Annotation,指定注解为MyCustomAnnotation(需填写完整类名)
- 选择
添加快速修复
- 回到检查配置页,点击
Fixes按钮,选择Add Fix > Replace Template - 在替换模板中输入正确的调用形式:
@MyCustomAnnotation myFunction() - 保存配置后,代码中未加注解的
myFunction()调用会立刻出现警告,点击左侧的灯泡图标就能一键添加注解。
- 回到检查配置页,点击
方法二:编写Kotlin编译器插件
如果需要在编译阶段强制校验(而非仅IDE提示),可以编写Kotlin编译器插件:
- 创建编译器插件项目,实现对
CallExpression的语法分析逻辑 - 检测所有
myFunction()的调用节点,检查其是否被@MyCustomAnnotation修饰 - 若未检测到注解,抛出编译警告或错误,并实现快速修复逻辑,让IDE能提示自动添加注解
这种方式适合团队统一代码规范,确保不符合要求的代码无法通过编译。
内容的提问来源于stack exchange,提问作者Tu Dang
相关产品推荐
相关产品推荐

