如何在IntelliJ中批量获取项目所有枚举类及其枚举值?
批量梳理项目枚举类及对应枚举值的自动化方案
完全不用手动逐个类排查,针对IntelliJ环境下的数百个枚举类梳理需求,有三个可直接落地的方案,按操作成本从低到高排列:
方案1:用IntelliJ自带结构搜索快速导出(零代码,5分钟搞定)
- 打开全局结构搜索入口,快捷键默认是
Ctrl+Shift+S(Windows)/Cmd+Shift+S(Mac),对应菜单路径是Edit > Find > Search Structurally - 搜索模板直接选择内置的
enum classes规则,将搜索范围设置为Project Files(排除第三方依赖包、jar包中的类),执行搜索后就能得到当前项目所有枚举类的列表,支持直接全选导出为文本/HTML格式,拿到全量枚举类的全限定名清单 - 如果需要同步导出每个枚举类下的枚举值,替换搜索模板为
enum $EnumName$ { $CONSTANT$ },将模板中$CONSTANT$变量的匹配次数设置为「1次到无限次」,执行搜索后结果会自动按枚举类分组展示所有枚举常量,直接导出即可。
方案2:用IntelliJ内置脚本控制台一键生成自定义格式清单(10行代码,支持自定义输出格式)
如果需要输出固定格式的清单(比如Markdown、JSON、带枚举注释说明的文档),直接用IDE内置的脚本控制台跑PSI遍历脚本即可,不需要额外安装插件:
- 打开菜单
Tools > IDE Scripting Console,选择Groovy作为脚本语言,控制台会自动绑定当前打开的项目对象 - 粘贴以下脚本直接执行,控制台会直接输出按Markdown格式排版好的枚举清单,复制即可用:
import com.intellij.openapi.application.ApplicationManager import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.PsiEnumConstant ApplicationManager.application.runReadAction { def scope = GlobalSearchScope.projectScope(project) def javaFacade = com.intellij.psi.JavaPsiFacade.getInstance(project) // 遍历项目源码范围内所有类 javaFacade.findClasses("", scope).each { psiClass -> if (psiClass.isEnum()) { println "### 枚举类:${psiClass.qualifiedName}" psiClass.fields.each { field -> if (field instanceof PsiEnumConstant) { println "- ${field.name}" } } println "" } } }
- 如果需要额外获取枚举的注释、枚举对应的字段值、构造参数等信息,直接在脚本里加对应PSI字段的读取逻辑即可,不需要额外做源码解析。
方案3:反射扫描(不依赖IDE,可集成到构建流程)
如果需要把枚举清单生成逻辑集成到项目的构建流程、文档自动生成流程里,可以用反射扫描编译产物的方式实现:
- 给项目的构建脚本加个轻量的扫描任务,引入反射扫描工具包,扫描项目编译输出的classes目录
- 调用扫描工具的
getSubTypesOf(Enum.class)方法拿到所有项目内的枚举类,再通过反射调用每个枚举类的values()方法,就能拿到所有枚举实例的信息 - 这种方式不会触发枚举类的业务逻辑,哪怕枚举有自定义构造方法、抽象方法也能正常扫描,没有安全风险。
注意:所有方案都要把扫描范围限定在当前项目的源码/编译产物目录,不要把第三方依赖的范围加进去,避免把框架、工具包里的枚举统计到清单里。
内容的提问来源于stack exchange,提问作者dellasavia
相关产品推荐
相关产品推荐

