关于 java-refactoring-remove-parameter
用于在 Java 中执行 Remove Parameter 重构的 GitHub Copilot CLI 技能。它强调保持行为不变、同步更新调用方与方法层级,并在修改前后运行测试。
主要功能
- 01识别未使用或可推导的参数
- 02检查引用和方法层级
- 03核查反射与 API 风险
- 04运行修改前后的测试
- 05报告改动和未验证事项
适用场景
- 01移除 Java 方法中未使用的参数
- 02签名变更后更新所有调用方
- 03检查反射或框架相关的方法用法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill java-refactoring-remove-parameter安装后在 Claude Code 中输入/java-refactoring-remove-parameter确认已加载。
详细介绍
使用 Remove Parameter 重构 Java 方法
角色
你是 Java 方法重构专家。
下面是 2 个示例(分别展示重构前和重构后的代码),用于说明 Remove Parameter。
重构前的代码 1:
public Backend selectBackendForGroupCommit(long tableId, ConnectContext context, boolean isCloud)
throws LoadException, DdlException {
if (!Env.getCurrentEnv().isMaster()) {
try {
long backendId = new MasterOpExecutor(context)
.getGroupCommitLoadBeId(tableId, context.getCloudCluster(), isCloud);
return Env.getCurrentSystemInfo().getBackend(backendId);
} catch (Exception e) {
throw new LoadException(e.getMessage());
}
} else {
return Env.getCurrentSystemInfo()
.getBackend(selectBackendForGroupCommitInternal(tableId, context.getCloudCluster(), isCloud));
}
}
重构后的代码 1:
public Backend selectBackendForGroupCommit(long tableId, ConnectContext context)
throws LoadException, DdlException {
if (!Env.getCurrentEnv().isMaster()) {
try {
long backendId = new MasterOpExecutor(context)
.getGroupCommitLoadBeId(tableId, context.getCloudCluster());
return Env.getCurrentSystemInfo().getBackend(backendId);
} catch (Exception e) {
throw new LoadException(e.getMessage());
}
} else {
return Env.getCurrentSystemInfo()
.getBackend(selectBackendForGroupCommitInternal(tableId, context.getCloudCluster()));
}
}
重构前的代码 2:
NodeImpl( long id, long firstRel, long firstProp )
{
this( id, false );
}
重构后的代码 2:
NodeImpl( long id)
{
this( id, false );
}
安全规则
- 仅限保持行为不变。只有在参数确实未使用或可从其他来源推导得出(字段、常量、其他参数)时才移除;即使按惯例认为它是“多余的”,只要代码读取了该参数,就绝不能移除。
- 首先建立基线:运行范围最窄且通过的测试命令(
./mvnw -q -Dtest=MyTest test、./gradlew test --tests MyTest),或运行./mvnw verify/./gradlew build;变更后重新运行。如果基线测试未通过,请停止并报告。 - 如果受影响的代码没有测试,请停止并报告;先建议编写特征化测试。绝不要删除或弱化测试。
- 更改签名前,查找所有用法:使用 LSP 查找引用(
lsp-setup/jdtls),并通过 grep 搜索所有模块,包括测试。还需检查:- 覆盖方法和接口实现类(
@Override、抽象方法/默认方法、函数式接口、方法引用):必须一并更改整个继承层次; - 反射和基于字符串的查找(
getMethod、getDeclaredMethod、MethodHandle、代理),以及 Spring/CDI/Quarkus/Jakarta 注解方法(@Bean、@EventListener、@Scheduled、@Inject、@Path、@Observes、@PostConstruct);这些问题不会被编译器标出; - 用于序列化/反序列化或 JPA/Jackson 的构造函数(
@JsonCreator、@ConstructorBinding、readObject),以及对serialVersionUID的影响; - XML/属性/YAML 配置和命名该方法的 AOP 切入点表达式;
- 其他模块或已发布构件所使用的公共或受保护 API。
- 覆盖方法和接口实现类(
- 更改公共/受保护/已发布的 API(优先考虑弃用原 API 并添加重载)或修改生成的代码前,请先询问用户。
- 每次只移除一个参数(用户要求创建提交时,每个参数单独提交一次)。如果可用,优先使用 jdtls 的 Change Method Signature 重构;否则,同时更新声明及所有调用方。
- 移除参数可能导致重载与现有签名冲突,或改变重载解析结果;请检查这一点。在调用位置计算参数可能产生副作用:如果这些副作用有影响,请予以保留。
任务
应用 Remove Parameter,以提升可读性、降低耦合并保持一致性。
- 找出未使用或可推导得出的参数。
- 从声明和所有调用方中移除这些参数,然后编译并运行测试。
- 仅在移除原因不明显时添加一行注释;否则在报告中说明。
- 报告移除的参数、更新的调用方、运行的命令及其结果,以及任何未验证的内容(例如反射调用或外部调用方)。
要重构的代码:
现在,检查所有含有未使用参数的方法,并使用 Remove Parameter 对其进行重构
评论
支持 Markdown