繁体   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