簡體   English   中英

列出不再在任何地方使用的所有已棄用類/方法的工具?

[英]Tool that lists all deprecated classes/methods that are no longer used anywhere?

我需要清理一些遺留代碼。 刪除未使用的代碼是重要的一步。

是否有一種工具可以找到所有已棄用的代碼,刪除仍在某處使用的所有項目,並為我提供未使用的已棄用代碼列表?

對於加分:是否有工具可以找到未使用的代碼、未棄用的代碼?

我知道這從來都不是完美的,但我知道在哪些情況下我需要特殊處理(如在通過 DI 引用的 DB 驅動程序或類中)。

我不完全確定我理解你的問題。 您想要一個不棄用仍被引用的代碼的工具嗎? 任何 IDE 都會幫助你解決這個問題。 不會自動刪除@Deprecated 注釋,但可以通過全局查詢和替換輕松完成。 在刪除未使用的代碼后,當然:

如果您只想刪除未使用的代碼,我在之前的項目中為此使用了 eclipse 插件ucdetector 雖然它實際上並沒有刪除未使用的代碼,但它確實為您提供了沒有引用的方法、類和常量的列表,因此您可以自己刪除它們。 這是一件好事。

正如您自己指出的那樣,使用靜態分析可能似乎未使用某些類/方法。 在我看來,這使得這項任務無法自動化。 編碼人員必須分析報告為未使用的每個代碼塊。

如果您有幸擁有出色的測試覆蓋率,另一種選擇是使用代碼覆蓋率分析工具,例如 cobertura、clover 或 emma。

我認為這可以滿足您的要求,但忽略了@Deprecated。 我似乎記得它在項目的上下文菜單中添加了一個選項來查找未使用的方法。

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

IntelliJ 在我編寫它們時識別它們。 我不確定是否有自動刪除它們的選項。

不確定你的 Q 有點難以掌握...... StackOverflow 對我來說它主要是關於代碼問題所以我假設你想要一種方法來獲取所有帶有 @Deprecated 注釋的方法......

所以基本上你需要研究 Java Reflection ..

因此,例如,假設您想要日期類(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
            }
        }

    }

使用Spoon庫轉換 java 源代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM