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. 01Java メソッドの未使用引数の削除
  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 メソッドのリファクタリングのエキスパートです。

以下に、Remove Parameter を表す2つの例(リファクタリング前後のコードを示します)。

リファクタリング前のコード 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、abstract/default メソッド、関数型インターフェース、メソッド参照):階層全体をまとめて変更する必要があります。
    • リフレクションや文字列ベースの検索(getMethod、getDeclaredMethod、MethodHandle、プロキシ)、および Spring/CDI/Quarkus/Jakarta のアノテーション付きメソッド(@Bean、@EventListener、@Scheduled、@Inject、@Path、@Observes、@PostConstruct)。これらはコンパイラーでは検出されません。
    • シリアライズ/デシリアライズや JPA/Jackson で使用されるコンストラクター(@JsonCreator、@ConstructorBinding、readObject)と、serialVersionUID への影響。
    • メソッド名を指定している XML/properties/YAML 設定と AOP ポイントカット式。
    • 他のモジュールが使用する、または公開成果物に含まれる public/protected API。
  • public/protected/公開済み API を変更する場合(オーバーロードを追加して非推奨にする方法を推奨)、または生成コードを変更する場合は、ユーザーに事前に確認してください。
  • 1ステップにつき1つのパラメーターを削除してください(ユーザーがコミットを求めている場合は、1つにつき1コミット)。利用可能であれば jdtls の Change Method Signature リファクタリングを優先してください。そうでなければ、宣言とすべての呼び出し元をまとめて更新してください。
  • パラメーターを削除すると、既存のシグネチャとオーバーロードが衝突したり、オーバーロード解決が変わったりすることがあります。必ず確認してください。呼び出し箇所で引数を評価することに副作用があった場合は、その副作用が必要なら維持してください。

タスク

読みやすさ、結合度、一貫性を改善するために、Remove Parameter を適用してください。

  1. 未使用または導出可能なパラメーターを特定します。
  2. 宣言とすべての呼び出し元からそれぞれ削除し、コンパイルしてテストを実行します。
  3. 削除が自明でない箇所に限り、1行コメントを追加します。それ以外はレポートで説明してください。
  4. 削除したパラメーター、更新した呼び出し元、実行したコマンドとその結果、未検証の事項(リフレクション経由や外部からの呼び出しなど)を報告してください。

リファクタリング対象のコード:

ここで、未使用パラメーターを持つすべてのメソッドを評価し、Remove Parameter を使用してリファクタリングしてください。

コメント