Java を解析できるツールが必要だという Seanizer の回答に同意します。これは必要ですが、十分ではありません。あなたが本当に欲しいのは、信頼できる大量変更を実行できるツールです。
これを行うには、Java を解析し、解析されたコードに対してパターン マッチを行い、置換呼び出しをインストールし、残りのソース コードを破壊することなく答えを吐き出すことができるツールが必要です。
当社のDMS Software Reengineering Toolkitは、Java を含むさまざまな言語でこれらすべてを実行できます。ソースの完全なJava システムを解析し、抽象構文ツリーを構築します (コードのセット全体)。
DMS は、パターン指向のソースからソースへの変換を適用して、目的の変更を実現できます。
OP の効果を達成するために、彼は次のプログラム変換を適用します。
rule replace_legacy_log(s:STRING): expression -> expression
" log(\s) " -> " log( \s, \class\(\), \method\(\) ) "
このルールが言っていることは、1 つの文字列引数を持つ log の呼び出しを見つけ、それを、補助関数classとmethodによって決定される 2 つの追加の引数を持つ log の呼び出しに置き換えること です。
これらの関数は、ルールが一致を検出した AST ノード ルートの包含メソッド名と包含クラス名を決定します。
ルールは「ソース形式」で記述されていますが、実際には AST と照合し、見つかった AST を変更された AST に置き換えます。
変更されたソースを元に戻すには、DMS に単に prettyprint (適切なレイアウトを作成するため) または fidelity print (古いコードのレイアウトを維持したい場合) を依頼します。DMS はコメント、基数などを保持します。\
既存のアプリケーションに「ログ」関数の定義が複数ある場合は、修飾子を追加する必要があります。
... if IsDesiredLog().
IsDesiredLogは、DMS のシンボル テーブルと継承情報を使用して、特定のログが対象の定義を参照しているかどうかを判断します。