在IntelliJ中实现自定义实体类字段引用校验检查
为自研框架实现IntelliJ字段合法性检查
场景说明
你使用的自研框架包含以下核心方法:
查询方法
// find all entityClass matching the given filters public <E> List<E> findAllBy(Class<E> entityClass, Filter... filter);
Filter构造方法
// param is the name of the field of entityClass, value is the value it should take public static Filter equals(String param, Object value);
核心问题:能否检查equals方法的param参数对应实体类已定义字段?
可以实现,需要基于IntelliJ Platform SDK开发自定义检查插件,核心步骤如下:
- 识别
findAllBy方法调用,提取第一个参数对应的实体类类型 - 追踪方法内传入的
Filter实例,定位到equals静态方法的调用,获取param的字符串参数值 - 通过IntelliJ的PSI(Program Structure Interface)分析实体类的字段信息,校验
param是否为该类的有效字段名 - 若参数不匹配,在编辑器中高亮标记错误
附加问题:能否处理"foo.foo2"这类嵌套字段?
完全可以,只需在字段校验逻辑中增加路径解析:
- 将
param按.分割成字段路径列表(如["foo", "foo2"]) - 从实体类开始逐层校验:先确认当前类有
foo字段,再获取foo字段的类型,接着校验该类型是否存在foo2字段 - 任何一层字段不存在时,立即触发错误提示
实现核心要点
- 依赖IntelliJ的PSI解析代码结构,精准定位方法调用和参数
- 利用
PsiClass、PsiField等API获取类的字段信息,支持嵌套类型的递归查询 - 自定义
LocalInspectionTool子类实现检查逻辑,在插件配置中注册后,IntelliJ会自动在代码分析时执行该检查
内容的提问来源于stack exchange,提问作者Loïc Gammaitoni
相关产品推荐
相关产品推荐

