进阶玩法:用intellij-generateAllSetMethod的Velocity模板定制你自己的代码生成规则
【免费下载链接】intellij-generateAllSetMethodIntellij plugin to generate call to setter method value for class项目地址: https://gitcode.com/gh_mirrors/in/intellij-generateAllSetMethod
intellij-generateAllSetMethod 是一款 IntelliJ IDEA 插件,能一键为类的所有字段生成 setter 默认值调用。更强大的隐藏能力是:它内置了 Velocity 模板引擎,让你不用写一行 Java 代码,就能自定义代码生成规则——想生成什么代码,写个模板就行。
为什么你需要自定义生成模板
插件自带的生成功能(全量 setter、getter、Builder、Converter)已经覆盖大部分场景,但真实项目里总有一些"个性化"需求:
- 只想给部分字段赋默认值,其余字段跳过
- 默认值要按团队规范来,比如时间统一
LocalDateTime.now()、金额统一new BigDecimal("0") - 生成代码时自动带上注释、断言或日志语句
- 生成非 setter 类的代码片段,比如初始化集合的样板代码
这些需求,改源码不现实,而 Velocity 模板让你"配置即生效"。
3 步开启 Velocity 模板生成
第 1 步:打开设置面板,勾选模板开关
进入Settings → Tools → GenerateAllSetter,勾选Generate by template选项。这一项的开关逻辑定义在 GenerateAllSetterSettingForm.java 中。
第 2 步:新建模板并编写内容
- 点击工具栏的+(Add)按钮,输入一个模板名称
- 在右侧带语法高亮的编辑器中编写 Velocity 模板(编辑器按
.vm文件类型渲染,写起来很舒服) - 左侧列表支持多个模板并存,点选即可切换编辑;不想要的模板用删除按钮移除
模板的增删与持久化状态保存在 GenerateSetterState.java,重启 IDE 后不会丢失。
第 3 步:在变量上触发 Generate by template
把光标放在一个局部变量上,按Alt+Enter(macOS 为 Option+Enter),选择Generate by template意图。插件会弹出模板选择对话框,实时渲染出生成结果,确认后插入到代码中。这一步的入口实现见 GenerateByTemplateAction.java,渲染对话框见 TemplateDialog.java。
模板变量速查表:只有 2 个核心变量
很多人以为模板变量会很多,实际上模板上下文只注入了两个变量(见 VelocityUtils.java),其余都能从类对象上取到:
| 变量 | 类型 | 说明 |
|---|---|---|
$theClass | PsiClass | 变量所属的类,可通过$theClass.methods、$theClass.fields遍历成员 |
$variableName | String | 当前触发意图的局部变量名 |
常用取法:
$theClass.methods—— 遍历所有方法(可配合#if($method.name.startsWith("set"))过滤 setter)$method.parameterList.parameters[0].getType().canonicalText—— 拿到 setter 参数类型的完整类名- 官方文档中的模板自定义说明也提供了变量对照表
读懂内置模板:10 分钟学会语法
项目仓库里就躺着一份可直接抄作业的内置模板 template.vm,它实现了"给每个 setter 按类型赋默认值"的完整逻辑。核心套路就三板斧:
#foreach($method in $theClass.methods) #if($method.name.startsWith("set") && $method.hasParameters()) #set($parameterType=$method.parameterList.parameters[0].getType().canonicalText) #if($parameterType.equals("java.util.Date")) #set($defaultValue="new Date()") #else #set($defaultValue="null") #end $variableName.${method.name}(${defaultValue}); #end #end#foreach ... #end:遍历类的所有方法#if / #elseif / #else:按参数类型分发默认值(内置模板为Float、BigDecimal、LocalDate等二十多种类型都写了规则)#set:定义局部变量$variableName.${method.name}(...):变量插值,拼出user.setName("...")这样的调用
你只需要照着内置模板改条件分支,就能得到自己的生成规则。
一键 Debug:改完模板立即看效果
不用退出设置页去写测试代码——面板上有一个Debug按钮:输入任意一个项目里存在的类名,点一下,插件会立即用该类和示例变量名demo渲染你的模板,并把结果弹窗展示出来。
这个"所见即所得"的调试闭环来自 GenerateAllSetterSettingForm.java 中 Debug 按钮的监听器,调用的还是同一个 VelocityUtils.java 渲染入口。
⚠️小提示:如果模板写错了,VelocityUtils会把异常堆栈直接放进生成的文本里返回——看到 "catch exception when generate" 开头的输出,就说明模板语法有问题,按堆栈提示修正即可。
总结
- 自定义模板 = 勾选Generate by template+ 建模板 +Alt+Enter 选 Generate by template,三步完成
- 核心变量只有
$theClass和$variableName,其余信息都能从类对象上取 - 照着内置 template.vm 改条件分支,就是最快的上手路径
- 用 Debug 按钮实时预览,模板零试错成本
掌握 Velocity 模板后,intellij-generateAllSetMethod 从"好用的插件"变成了"你的私人代码生成器",值得每个重度 IDEA 用户花十分钟体验一下。
【免费下载链接】intellij-generateAllSetMethodIntellij plugin to generate call to setter method value for class项目地址: https://gitcode.com/gh_mirrors/in/intellij-generateAllSetMethod
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考