概要
Eclipseのファイル検索機能でHashMapをEnumMapに一括置換
詳細
Enumをキーとして利用する場合、HashMapよりもEnumMapのほうが高速に機能します。
既存システム上でEnumMapを全く利用していないため、
HashMapをEnumMapに修正したい場合を想定します。
正規表現
・置換前
※大文字小文字の区別、正規表現のオプションを有効にする
(new[\s]+?)(Hash)(Map[\s]*?<[\s]*?)([^,]+Enum)([\s]*?\,[\s]*?.+[\s]*?>)(\(\))([\s]*?;)
・置換後
\1Enum\3\4\5(\4.class)\7
・各グループ詳細
(new[\s]+?) // newからHashの直前まで (Hash) // Hash(Enumに置換する) (Map[\s]*?<[\s]*?) // Mapとジェネリック指定の開始の括弧 ([^,]+Enum) // Mapのキー指定部の任意のEnum ([\s]*?\,[\s]*?.+[\s]*?>) // Mapのジェネリック指定のカンマと値の指定とジェネリック指定終了の括弧 (\(\)) // ジェネリック指定後の丸括弧 ([\s]*?;) // 命令文終了のセミコロン
※[\s]+? 部分は任意の数のスペース、改行等が入る可能性のある箇所。
・補足
ファイル検索で置換したいプロジェクトに対して一括で置換を実行した後は、
importの補足が必要なので一括でimport編成を行えば作業完了です。
サンプル・コード
置換前
package enummapreplace; import gr.java_conf.tb.java_sample_code.copyutil.HogeEnum; import java.util.HashMap; import java.util.Map; public class Sample1 { @SuppressWarnings({ "rawtypes", "unused" }) public static void main(String[] args) { Map<HogeEnum, String> map1 = new HashMap<HogeEnum, String>(); Map<HogeEnum, String> map2 = new HashMap <HogeEnum, String>(); Map<HogeEnum, String> map3 = new HashMap <HogeEnum, String>(); Map <HogeEnum, String> map5 = new HashMap <HogeEnum, String>(); Map<HogeEnum, String> map6 = new HashMap <HogeEnum, String>(); map6 = new HashMap <HogeEnum, String>(); Map map90 = new HashMap(); Map<String, String> map91 = new HashMap<String, String>(); Map<String, Map<HogeEnum, String>> map92 = new HashMap<String, Map<HogeEnum, String>>(); } }
置換後
package enummapreplace; import gr.java_conf.tb.java_sample_code.copyutil.HogeEnum; import java.util.HashMap; import java.util.Map; public class Sample1 { @SuppressWarnings({ "rawtypes", "unused" }) public static void main(String[] args) { Map<HogeEnum, String> map1 = new EnumMap<HogeEnum, String>(HogeEnum.class); Map<HogeEnum, String> map2 = new EnumMap <HogeEnum, String>(HogeEnum.class); Map<HogeEnum, String> map3 = new EnumMap <HogeEnum, String>(HogeEnum.class); Map <HogeEnum, String> map5 = new EnumMap <HogeEnum, String>(HogeEnum.class); Map<HogeEnum, String> map6 = new EnumMap <HogeEnum, String>(HogeEnum.class); map6 = new EnumMap <HogeEnum, String>(HogeEnum.class); Map map90 = new HashMap(); Map<String, String> map91 = new HashMap<String, String>(); Map<String, Map<HogeEnum, String>> map92 = new HashMap<String, Map<HogeEnum, String>>(); } }