列出所有不再使用的弃用类/方法的工具?

时间:2010-11-23 13:02:41

标签: java deprecated code-cleanup

我需要清理一些遗留代码。删除未使用的代码是重要的一步。

是否有工具可以找到所有已弃用的代码,删除仍在某处使用的所有项目,并为我提供未使用的弃用代码列表?

奖励积分:是否有工具可以找到未使用的代码非弃用代码?

我知道这绝不是完美的但我知道在哪些情况下我需要特殊处理(如DB驱动程序或通过DI引用的类)。

5 个答案:

答案 0 :(得分:3)

我不完全确定我理解你的问题。您是否想要一个取消仍然引用的代码的工具?任何IDE都可以帮助您。使用全局查询和替换可以轻松完成,但不会自动删除@Deprecated注释。删除未使用的代码后,当然:

如果您只想删除未使用的代码,我在之前的项目中为此目的使用了eclipse插件ucdetector。虽然它实际上没有删除未使用的代码,但它确实为您提供了没有引用的方法,类和常量的列表,因此您可以自己删除它们。这是一件好事。

正如您自己指出的那样,有些类/方法似乎未使用静态分析。在我看来,这使得无法自动执行此任务。编码人员必须分析报告为未使用的每个代码块。

如果你有幸拥有出色的测试覆盖率,另一种选择是使用代码覆盖率分析工具,如cobertura,clover或emma。

答案 1 :(得分:0)

我认为这可以做你想要的,但忽略@Deprecated。我似乎记得它在项目的上下文菜单中添加了一个选项来查找未使用的方法。

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

答案 2 :(得分:0)

IntelliJ在我编写它们时识别它们。我不确定是否有自动删除它们的选项。

答案 3 :(得分:0)

不确定你的Q有点难以掌握... StackOverflow对我来说主要是关于Code问题所以我假设你想要一种方法来获取@Deprecated Annotation的所有方法......

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

因此,举例来说,让我们说你想要Date类(Java.util.Date)中的所有Deprecated方法,这就是你可以做的......

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
            }
        }

    }

答案 4 :(得分:0)

使用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();

请参见method removeDeprecatedMethods