我需要清理一些旧代码。删除未使用的代码是重要的一步。
有没有一种工具可以查找所有已弃用的代码,删除所有仍在某处使用的项目,并给我列出未使用的弃用代码的列表?
额外加分:是否有一种工具可以查找未使用的非弃用代码?
我知道这永远不会完美,但我知道哪些情况需要特殊处理(例如数据库驱动程序或通过 DI 引用的类)。
我需要清理一些旧代码。删除未使用的代码是重要的一步。
有没有一种工具可以查找所有已弃用的代码,删除所有仍在某处使用的项目,并给我列出未使用的弃用代码的列表?
额外加分:是否有一种工具可以查找未使用的非弃用代码?
我知道这永远不会完美,但我知道哪些情况需要特殊处理(例如数据库驱动程序或通过 DI 引用的类)。
如果你只是想移除未使用的代码,在以前的项目中我曾使用eclipse插件ucdetector。它虽然不能直接移除未使用的代码,但是会提供一个没有引用的方法、类和常量列表,方便你手动移除。这是一个不错的选择。
正如你所指出的,有些类或方法在静态分析上可能看起来未被使用。在我看来,这使得自动化此任务变得不可能。你作为编码者需要分析所有被报告未被使用的代码块。
如果你足够幸运能够拥有优秀的测试覆盖率,另一个选择是使用代码覆盖率分析工具,如cobertura、clover或emma。
使用 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();
我认为这可以满足你的需求,但会忽略@Deprecated。我记得它会在项目的上下文菜单中添加一个选项来查找未使用的方法。
IntelliJ在我输入时会识别它们。我不确定是否有自动删除它们的选项。
不确定你的问题有点难以理解...... 对我来说,Stack Overflow 主要是关于代码问题的,所以我假设你想要一种获取所有带有 @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
}
}
}