代码之家  ›  专栏  ›  技术社区  ›  Aaron Digulla

列出不再在任何地方使用的所有不推荐的类/方法的工具?

  •  3
  • Aaron Digulla  · 技术社区  · 15 年前

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

    有没有一个工具可以找到所有不推荐的代码,删除仍然在某个地方使用的所有项,并给我一个未使用的不推荐的代码列表?

    额外的一点:是否有一个工具可以找到未使用的代码,非弃用的代码?

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Fredrik Bromee    15 年前

    我不能完全肯定我理解你的问题。是否需要一个工具来取消对仍被引用的代码的否决?任何IDE都会帮你的。不是自动删除@Deprecated注释,而是通过全局查询和替换轻松完成。当然,在删除了未使用的代码之后:

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

    正如您自己所指出的,有些类/方法似乎没有使用静态分析。在我看来,这使得这项任务不可能自动化。你这个编码员必须分析每一块被报告为未使用的代码。

    如果您有幸拥有优秀的测试覆盖率,另一个选择是使用代码覆盖率分析工具,如cobertura、clover或emma。

        2
  •  0
  •   gub    15 年前

    我想这是你想要的,但忽略了“不赞成”。我似乎记得它在项目的上下文菜单中添加了一个选项来查找未使用的方法。

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

        3
  •  0
  •   duffymo    15 年前

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

        4
  •  0
  •   MR.X_XD    8 年前

    不确定你的问题有点难理解。。。StackOverflow对我来说主要是关于代码问题,所以我假设您想要一种方法来获得所有带有@Deprecated注释的方法。。。

    所以基本上你需要研究Java反射。。

    例如,假设您想要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
                }
            }
    
        }
    
        5
  •  0
  •   Martin Monperrus Bernuly    6 年前

    使用 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 .

    推荐文章