Files
idea-plugin-copy-bean/README.md
T
maxf 837aa3b49e 1.0.1
- 支持 lambda 作用域中使用 it 参数作为源 Bean
- 新增链式 Copy 复选框选项,默认不勾选
- 同时复制父类属性改为默认勾选
- 优化下拉框类名显示逻辑
- 移除目标类型解析校验,直接按源 Bean getter 拼接 set 方法
- 增加本地 intellijIdea 构建支持
2026-09-07 15:25:18 +08:00

4.1 KiB
Raw Blame History

Bean Copy (IntelliJ IDEA 插件)

一键把源 JavaBean 的属性值,通过 get/set 方法复制到目标 JavaBean。

功能

在一个方法内写:

A a = new A();
B b = new B();

按下 Alt + Insert(Generate)或 右键菜单,选择 Bean Copy..., 在弹出的对话框中选一个 Source Bean(读) 和一个 Target Bean(写), 插件就会在光标处自动生成:

b.setXxx(a.getXxx());
b.setYyy(a.getYyy());
// ... 每个在目标类中有同名 setter 的属性
  • 自动识别 getXxx()、isXxx()(布尔)等 getter
  • 用 PropertyUtil 的属性名匹配做 get/set 配对,get / set / is 前缀与大小写自动处理
  • 只复制「源有 getter 且目标有同名 setter」的属性
  • 对话框的两个下拉框可编辑:既能下拉选择,也能直接输入变量名
  • 若光标正位于某个变量上,打开对话框时会自动预填源/目标为那个变量
  • 光标选中变量触发时,生成的代码会替换选区,去掉先前选中的变量名
  • 支持 lambda 作用域:不仅识别局部变量,还能识别 lambda 参数(如 it),可在 list.stream()...map(it -> { ... it 复制给新对象 ... }).toList() 中直接把 it 当源 Bean
  • 提供「同时复制父类(继承)的属性」复选框(默认勾选),勾选后连同父类/接口继承的 getter/setter 一起复制
  • Target 填类名(经 IDE 自带类检索/索引解析)即可自动生成链式 new Target().setXxx(src.getXxx()).setYyy(src.getYyy());(只纳入返回目标类自身的链式 setter),适合 builder / 链式赋值场景;Target 填变量名则逐条生成赋值语句

环境要求

  • JDK 21(IntelliJ 2025.x 平台基于 JDK 21 编译)
  • IntelliJ IDEA(开发/构建时会自动下载 2025.2 平台依赖)

构建技术栈

  • 构建脚本位于 build.gradle.kts / settings.gradle.kts / gradle.properties
  • 使用 IntelliJ Platform Gradle Plugin 2.x(org.jetbrains.intellij.platform)
  • 目标平台 intellijIdea("2025.2.6.2"),支持 2025.2+(since-build = 252)
  • 额外引入内置 com.intellij.java 插件,使 PsiClass / PsiMethod / PsiJavaFile 等 Java PSI 可被编译
  • Gradle 9.5 wrapper 已内置,无需自行安装 Gradle

构建

用 IntelliJ IDEA 打开本项目,等待 Gradle 同步完成; 或命令行(项目自带 wrapper,无需本机安装 Gradle):

./gradlew build              # 产出 build/distributions/idea-plugin-copy-bean-1.0.1.zip(已让 build 依赖 buildPlugin)
./gradlew buildPlugin        # 等价:仅产出插件 zip

说明:buildPlugin 是 IntelliJ 插件专属任务,默认不会挂到标准 build 生命周期上; 项目里已通过 tasks.named("build") { dependsOn("buildPlugin") } 让 ./gradlew build 也能直接产出可安装的 zip。

运行调试

在 IDEA 的 Gradle 任务里(或命令行)运行:

./gradlew runIde             # 启动一个带本插件的临时 IDE 实例进行调试

首次运行会自动下载平台并全量索引,耗时较长(几十分钟),属正常现象;后续会复用配置缓存/构建缓存,快很多。

安装到正式 IDE

  1. 执行 ./gradlew build 或 ./gradlew buildPlugin
  2. 打开 IDEA → Settings → Plugins → ⚙ → Install Plugin from Disk…
  3. 选择 build/distributions/idea-plugin-copy-bean-1.0.1.zip 并重启 IDE

项目结构

src/main/resources/META-INF/plugin.xml   # 插件描述符,注册菜单动作、声明平台版本
src/main/kotlin/top/yexuejc/beancopy/
    BeanCopyAction.kt     # 触发动作 + 生成逻辑(遍历源 getter → 匹配目标 setter,支持继承链)
    BeanCopyDialog.kt     # 源/目标 Bean 选择对话框(可编辑下拉 + 复制父类复选框)
    BeanVar.kt            # 作用域内 Bean 变量数据类
gradle.properties         # 版本号、编译内存、Gradle 缓存开关
settings.gradle.kts       # 插件仓库、Kotlin/platform 插件版本
build.gradle.kts          # intellijPlatform 声明、目标平台与依赖、build→buildPlugin 绑定