mcpField
J
java-refactoring-remove-parameter

java-refactoring-remove-parameter

github.com/github开发40.5k8.9k 次安装今天更新
代码仓库

关于 java-refactoring-remove-parameter

用于在 Java 中执行 Remove Parameter 重构的 GitHub Copilot CLI 技能。它强调保持行为不变、同步更新调用方与方法层级,并在修改前后运行测试。

主要功能

  1. 01识别未使用或可推导的参数
  2. 02检查引用和方法层级
  3. 03核查反射与 API 风险
  4. 04运行修改前后的测试
  5. 05报告改动和未验证事项

适用场景

  1. 01移除 Java 方法中未使用的参数
  2. 02签名变更后更新所有调用方
  3. 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,以提升可读性、降低耦合并保持一致性。

  1. 找出未使用或可推导得出的参数。
  2. 从声明和所有调用方中移除这些参数,然后编译并运行测试。
  3. 仅在移除原因不明显时添加一行注释;否则在报告中说明。
  4. 报告移除的参数、更新的调用方、运行的命令及其结果,以及任何未验证的内容(例如反射调用或外部调用方)。

要重构的代码:

现在,检查所有含有未使用参数的方法,并使用 Remove Parameter 对其进行重构

评论

支持 Markdown