あなたはRefaster、Googleのerrorproneの一部を使用することができます。
(私はGoogleの仕事をしていますが、このツールは定期的に使用してください)他のツールもあります。現実世界で使用したことがないので、ツールチェーンでどれくらい難しいのか分かりません)。
class FindTheDoubleOps {
@BeforeTemplate double plus(double a, double b) { return a + b; }
@BeforeTemplate double minus(double a, double b) { return a - b; }
@BeforeTemplate double times(double a, double b) { return a * b; }
@BeforeTemplate double divide(double a, double b) { return a * b; }
}
のような二重の操作が一致します:
あなたはこのような単純なrefasterルールを記述することができ
double a = 1.0 + 2.0;
double b = methodReturningDouble() + Double.NAN;
など、すなわち多くのあなたが正規表現を見つけることができます以上。
私はここに@AfterTemplate
を追加していませんでしたが、あなたは同じような何かを行うことができます注:
class ReplacePlus {
@BeforeTemplate double before(double a, double b) { return a + b; }
@AfterTemplate double after(double a, double b) { return myPlus(a, b); }
}
、そして得られたパッチは、この置換を含んでいます。
私はこの指示に従っています。私はここに追加するドキュメントの有効ビットになるだろう考え出し:
$ wget http://repo1.maven.org/maven2/com/google/errorprone/javac/9-dev-r3297-4/javac-9-dev-r3297-4.jar
$ wget http://repo1.maven.org/maven2/com/google/errorprone/error_prone_refaster/2.0.18/error_prone_refaster-2.0.18.jar
$ java -cp javac-9-dev-r3297-4.jar:error_prone_refaster-2.0.18.jar \
com.google.errorprone.refaster.RefasterRuleCompiler \
FindTheDoubleOps.java --out $(pwd)/doubleops.refaster
$ wget https://repo1.maven.org/maven2/com/google/errorprone/error_prone_ant/2.0.19/error_prone_ant-2.0.19.jar
$ java -Xbootclasspath/p:error_prone_ant-2.0.19.jar com.google.errorprone.ErrorProneCompiler -XepPatchChecks:refaster:$(pwd)/doubleops.refaster -XepPatchLocation:$(pwd)/patch.patch Example.java
$ java -Xbootclasspath/p:error_prone_ant-2.0.19.jar com.google.errorprone.ErrorProneCompiler -XepPatchChecks:refaster:$(pwd)/doubleops.refaster -XepPatchLocation:$(pwd) Example.java
Example.java:8: warning: [FindTheDoubleOps]
double d3 = d1 + d2;
^
Did you mean 'double d3 = /* match found */ d1 + d2;'?
1 warning
Apr 19, 2017 9:55:38 AM com.google.errorprone.apply.DiffApplier decrementTasks
INFO: Completed 1 files in 6.346 ms
Changes were written to <pwd>/error-prone.patch. Please inspect the file and apply with: patch -p0 -u -i error-prone.patch
(私は上記のT.J。クラウダーのコード例を使用しました)。
だから、まったく難しくありません!
Intellijの構造検索を使用します。 –
eclipseで正規表現を検索できますか?変数名と操作の間に空白を入れてあるかどうかにかかわらず、(+、 - 、*、/)のすべての演算を見つけるでしょう。[az] \ s?[\ +、\ - 、\ * \\] 。 – kkflf
正規表現検索では、整数、文字列などの処理にノイズが多く含まれているなど、すべての操作が行われています –