分123ダイアログ経由のリファクタリングの例In-placeモードではなく,ダイアログ経由のリファクタリングについて説明します。リネーム以外のリファクタリングは,だいたいこの流れになります。あるリファクタリングを実行すると,そのリファクタリング専用のダイアログが表示されます。図5はリネームのダイアログ例です。ダイアログ下部のボタンより上の部分は,リファクタリングのコマンドやその対象によって微妙に変化します。リネームだけでも,対象がクラス名,引数名,ローカル変数名などによって設定項目が変化します。「⁠Rename」ダイアログのバリエーション※このオプションをすべて説明するのは骨が折れるので割愛します。要するにリファクタリングの対象範囲を指示しているのです。この解説での対象は,ダイアログ下部のボタン群です。「Cancel」「⁠Help」は読んで字のごとしなので省略します。「⁠Refactor」が実行ボタンで,ダイアログに指示した内容でリファクタリングを実行します。解説の本命は残りの「Preview」です。In-placeモードにしろ,ダイアログの「Refactor」ボタンにしろリファクタリングは即実行で後は仕上げをご覧じろです。Studioを信じて即実行していいものかと不安になります。そんなときに使うのが,この「Preview」ボタンです。ボタン名から察するに「リファクタリング後のプレビューを表示してくれるのか」と期待しがちですが,実は違います。プレビューを実行してみるとわかりますが,「⁠Findツールウィンドウ」が表示され,そこにリファクタリングの対象がリストアップされます。「リファクタリング後」ではなく「リファクタリング前」がプレビューされるわけです。Previewタブ」ですが,リファクタリング対象がどこに影響を及ぼすかをカテゴリ別に分類して表示します。これが「プレビュー」の意味になります。Refactor」ボタンを押して実行します。問題というのは「ここはやり過ぎなのでリファクタリングしないで欲しい」箇所があるかどうかです。リファクタリングしてほしくない箇所があったら,そこを選択してコンテキストメニューの"Exclude"を実行します。すると,その箇所に取消線が引かれリファクタリング対象から除外されます。"Exclude"はDELキー,"Include"はINSキーにショートカットキーが割り当てられています⁠)⁠。リファクタリングの対象を指定するこの除外設定("Exclude")はプレビューの大事な機能なのですが,あまりにも控えめな機能なためか,それほど知られていないように思えます。Path...")で表示されるものと似ているようで若干異なります。検索時の「Findツールウィンドウ」については,第18回を参照してください。ここでは,その差分について説明します。違いはツールバーの右列です。増えている機能について表1にまとめました。どれもON/OFFのトグルボタンとして機能します。対象が読み込みアクセスを行っている箇所を表示します。対象が書き込みアクセスを行っている箇所を表示します。対象がimport文で使用されている箇所を表示します。Preview」です。ツールバーにあるこのアイコンを選択すると「Findツールウィンドウ」の右側に「Previewペイン」が表示されます。ここまでは検索時と同じなのですが,「⁠Previewペイン」の下部に,それぞれ以下のタブが追加されています(Previewタブ以外はプレビューの対象によって増減します⁠)⁠。「Previewタブ」は見ての通り対象箇所のコード片が表示されます。Hierarchyタブ」は,対象箇所の呼び出し階層が表示されます。Hierarchy」については第18回を参照してください。Hereタブ」は本連載ではまだ紹介していない分析機能のひとつです(後の回で紹介します⁠)⁠。このようにリファクタリングのプレビューでは,対象と影響箇所を多角的に評価してからリファクタリングを実行するかどうかを判断することができます。ここまでできると,さらに欲が出るのですが,今のところプレビューで分類した除外設定を記録して,他で再利用することはできません。Java著者プロフィール今井勝信(いまいまさのぶ)システムエンジニア。