3

いくつかのレガシーコードをクリーンアップする必要があります。未使用のコードを削除することは重要なステップです。

すべての非推奨コードを検索し、まだどこかで使用されているすべてのアイテムを削除し、未使用の非推奨コードのリストを表示するツールはありますか?

ボーナスポイントの場合:未使用のコード、非推奨でないコードを見つけることができるツールはありますか?

これは決して完璧ではないことは承知していますが、どのような場合に特別な処理が必要かはわかっています(DBドライバーやDIを介して参照されるクラスなど)。

4

5 に答える 5

3

私はあなたの質問を理解しているとは完全には確信していません。まだ参照されているコードの非推奨を解除するツールが必要ですか?どのIDEでもそれを支援します。自動的ではありませんが、@ Deprecatedアノテーションの削除は、グローバルなクエリと置換を使用して簡単に実行できます。もちろん、未使用のコードを削除した後は、次のようになります。

未使用のコードを削除するだけの場合は、以前のプロジェクトでこの目的のためにEclipseプラグインucdetectorを使用しました。未使用のコードは実際には削除されませんが、参照のないメソッド、クラス、定数のリストが表示されるため、自分で削除できます。これは良いことです。

ご指摘のとおり、静的分析では使用されていないように見えるクラス/メソッドがいくつかあります。私の意見では、これはこのタスクを自動化することを不可能にします。コーダーは、未使用であると報告されたコードのすべてのブロックを分析する必要があります。

幸運にも優れたテストカバレッジが得られる場合は、cobertura、clover、emmaなどのコードカバレッジ分析ツールを使用することもできます。

于 2010-11-30T08:54:26.963 に答える
0

これはあなたが望むことを行うと思いますが、@Deprecatedを無視します。プロジェクトのコンテキストメニューに未使用のメソッドを見つけるためのオプションが追加されたことを覚えているようです。

http://eclipse-tools.sourceforge.net/

于 2010-11-23T13:10:46.437 に答える
0

IntelliJは、私がそれらを書いているときにそれらを識別します。それらを自動的に削除するオプションがあるかどうかはわかりません。

于 2010-11-23T13:11:15.480 に答える
0

Qを把握するのが少し難しいかどうかはわかりません...StackOverflowは主にコードの問題に関するものなので、@Deprecatedアノテーションを使用してすべてのメソッドを取得する方法が必要だと思います...

したがって、基本的にはJavaReflectionを調べる必要があります。

したがって、たとえば、Dateクラス(Java.util.Date)のすべての非推奨メソッドが必要だとしましょう。これができることです...

Class<?> clazz = Date.class; //Getting Class Obj of the Date Class

    Method[] methods = clazz.getDeclaredMethods(); //Getting methods


    for (Method m : methods) { //Inhanced For-Loop To get them-all 
        for (Annotation a : m.getAnnotations()) {
            if (a instanceof Deprecated) {
                System.out.println(m.getName()); // gitting the Methods Names
            }
        }

    }
于 2018-05-01T16:31:45.567 に答える
0

Javaソースコードを変換するためのSpoonライブラリの使用:

String path = "src/main/java";
Launcher spoon = new Launcher();
spoon.addInputResource(path);
spoon.setSourceOutputDirectory(path);
spoon.addProcessor(new AbstractProcessor<CtMethod>() {
        @Override
        public void process(CtMethod method) {
                if (method.hasAnnotation(Deprecated.class)) {
                        method.delete();
                }
        }
});
spoon.getEnvironment().setPrettyPrinterCreator(() -> {
                        return new SniperJavaPrettyPrinter(spoon.getEnvironment());
                }
);
spoon.run();

メソッドremoveDeprecatedMethodsを参照してください。

于 2019-12-09T18:04:22.477 に答える