# serialuid-generator **Repository Path**: CiWeiBaBa/serialuid-generator ## Basic Information - **Project Name**: serialuid-generator - **Description**: 一个用于自动生成和管理Java类序列化的IDEA插件。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-05 - **Last Updated**: 2024-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SerialUID Generator 一个用于自动生成和管理Java类序列化的IDEA插件。 ## 功能特性 ### 1. 智能类名提示 - 支持配置类名后缀规则 - 符合规则的类会显示序列化提示图标 - 智能图标显示逻辑: - 对于符合后缀规则的类:显示图标 - 对于已实现Serializable但缺少serialVersionUID的类:显示图标 - 对于已完整实现序列化的类(已实现接口且有serialVersionUID):不显示图标 - 点击图标智能处理: - 场景1 - 完全未序列化的类: ```java public class UserDTO { private String name; } // 点击图标后自动转换为: public class UserDTO implements Serializable { private static final long serialVersionUID = -3378490720321904401L; private String name; } ``` - 场景2 - 已实现接口但缺少serialVersionUID: ```java public class UserDTO implements Serializable { private String name; } // 点击图标后自动添加: public class UserDTO implements Serializable { private static final long serialVersionUID = -3378490720321904401L; private String name; } ``` - serialVersionUID生成规则: - 基于类的结构计算唯一的哈希值 - 考虑因素包括:类名、修饰符、接口、非静态字段、方法签名 - 使用SHA-1算法确保生成值的唯一性 - 当类结构发生变化时,生成值会相应变化 - 智能代码追加,遵循Java代码规范: - 对于已有extends的类:`class MyClass extends Parent implements Serializable` - 对于已有implements的类:`class MyClass implements ExistingInterface, Serializable` - 自动在类体开始处生成serialVersionUID - 自动优化导入语句 ### 2. 批量序列化处理 - 支持目录级批量处理 - 支持多文件选择处理 - 右键菜单快速操作 - 自动检查并跳过已实现Serializable的类 - 保持原有代码格式和注释 #### 2.1 使用方式 1. 在Project视图中选择: - 单个Java文件 - 多个Java文件(按住Ctrl/Cmd多选) - 一个或多个目录 2. 右键选择"Generate SerialUID"(位于Find Usages上方) 3. 如果发现不符合后缀规则的类,会弹出选择对话框: - 处理所有类:处理所有找到的类 - 仅处理符合后缀规则的类:只处理符合配置后缀的类(默认选项) - 取消:取消本次操作 4. 选择后会显示处理进度,���随时取消 #### 2.2 处理逻辑 1. 预扫描阶段: - 递归扫描所选目录和文件 - 识别所有Java类(排除接口、枚举、注解) - 检查类名是否符合配置的后缀规则 - 如果存在不符合规则的类,显示选择对话框(最多显示3个类名,超出显示省略数量) 2. 处理阶段: - 显示进度条和当前处理的类名 - 自动跳过: - 接口、枚举、注解类型 - 已完整实现序列化的类(同时具有Serializable接口和serialVersionUID) - 智能处理: - 对于未实现Serializable的类:添加接口并生成serialVersionUID - 对于已实现Serializable但缺少serialVersionUID的类:仅生成serialVersionUID - 保持代码格式: - 保留原有的类注释 - 保持字段的相对位置 - 优化导入语句 #### 2.3 使用场景示例 1. 新项目批量处理: ## 项目结构 src/main/java/com/ryan/serialuid/ ├── actions/ # Action处理类 │ ├── GenerateAction.java # 图标点击动作 │ └── BatchGenerateAction.java # 批量处理动作 ├── config/ # 配置相关 │ ├── SerialSettings.java # 设置持久化 │ └── SerialConfigurable.java # 设置UI ├── icons/ # 图标资源 │ └── serial.svg # 序列化提示图标 ├���─ services/ # 核心服务 │ ├── SerialLineMarkerProvider.java # 行标记提供者 │ └── SerialGenerator.java # 序列化代码生成器 └── utils/ # 工具类 └── PsiUtils.java # PSI操作工具 ## 技术设计 ### 1. 类名提示功能 - 使用`LineMarkerProvider`实现类名提示图标 - 通过`PsiClass`解析类结构 - 使用`PsiElementFactory`生成代码 - 配置持久化使用`PersistentStateComponent` ### 2. 批量处理功能 - 实现`AnAction`处理右键菜单 - 使用`PsiDirectory`遍历目录 - 使用`WriteCommandAction`执行代码修改 ### 3. 设置功能 - 实现`Configurable`提供设置UI - 使用`JBTextField`等IntelliJ组件 - 支持后缀规则的增删改查 ## 开发计划 ### 第一阶段:基础功能 1. 实现设置界面 2. 完成类名提示图标 3. 实现单类序列化生成 ### 第二阶段:增强功能 1. 实现批量处理 2. 优化代码生成规则 3. 添加进度提示 ### 第三阶段:优化改进 1. 提升性能 2. 增加单元测试 3. 完善错误处理 ## 使用说明 ### 配置类名规则 1. 打开设置 (Preferences/Settings) 2. 找到 "Tools > SerialUID Generator" 3. 添加需要处理的类名后缀 ### 使用图标提示 1. 打开Java类文件 2. 查看类名左侧的序列化图标 3. 点击图标自动实现序列化 ### 批量处理 1. 在项目视图中选择目录或多个文件 2. 右键选择 "Generate SerialUID" 3. 等待处理完成 ## 依赖要求 - IntelliJ IDEA 2023.1+ - Java 8+ ## 构建与安装 ```bash ./gradlew buildPlugin ``` 插件包将生成在 `build/distributions` 目录下 ## 贡献指南 欢迎提交Issue和Pull Request ## 许可证 Apache License 2.0 ## 版本历史 ### 1.0.2 - 修复通知相关问题: - 更新到最新的通知 API - 添加通知组的国际化支持 - 优化通知显示效果 - 优化类型检查: - 排除接口、枚举、注解类型的序列化图标显示 - 即使类名符合后缀规则,也不会为这些类型显示图标 - 改进用户体验: - 统一中文提示信息 - 优化通知消息格式 ### 1.0.1 - 初始版本功能完善: - 支持配置类名后缀规则 - 实现智能图标提示 - 支持批量处理功能 - 添加进度提示和取消功能 ### 1.0.0 - 首次发布: - 基础的序列化生成功能 - 支持单个类处理 - 简单的设置界面