是否可以使用FindBugs检测源树中未使用的方法?我在SO上看到了一些帖子,其中用户声称要这样做,有些人询问如何在FB中执行此操作以及其他人声称FB无法执行此操作。
有谁知道这是怎么做到的?我只对从其他地方没有明确调用的方法感兴趣,我不关心反射。
答案 0 :(得分:13)
作为FindBugs团队的一员,我可以告诉你,不幸的是FindBugs 不这样做。如果您搜索我们网站上的bug patterns,那么“未使用”探测器的唯一提及是未使用的字段。
答案 1 :(得分:2)
我有一个目前我正在研究的项目就是这样......它很早就开始了,所以可能还有一堆漏洞:
答案 2 :(得分:1)
我认为Findbugs很可能报告公共方法,这些公共方法的使用方式不同于它报告私有方式(或者我正在考虑编译器标志:-)。
真正的问题是你为什么也想要?如果您正在编写一个已关闭且永远不会被扩展的程序,那么找到未使用的方法可以让您删除它们。但是,如果您正在编写API,则无法预测谁将需要这些方法,因此报告它们没有多大意义。
答案 3 :(得分:1)
嗯,从findbugs-1.3.9开始,它似乎不捕获未使用的方法。
当我在这个小样本上运行findbugs时:
public class TestJava
{
int j;
public static void main(String[] args)
{
System.out.println("Nothing.");
}
public void foo()
{
}
public static void bar()
{
}
}
没有发现foo和bar都没用过。 确实捕获TestJava.j是未使用的字段。
Unused field
This field is never used. Consider removing it from the class.
findbugs远非完美,但它仍然是一个非常有用的工具。
答案 4 :(得分:1)
好吧,既然你想在其他人做出回应的警告的情况下沿着这条路走下去,你可以复制并修改UPM detector来做你需要的事。
为FindBugs编写探测器非常简单(特别是当你有一个很好的起点时)。阅读this以开始使用
答案 5 :(得分:0)
找到未使用方法的候选者的最佳方法(对我而言)是使用覆盖工具,如emma。
检测您的应用程序,过度使用它并检查emma日志 - 会话期间未使用的方法可能未使用,您可以使用自己喜欢的IDE(eclipse,...)来检查未访问的方法调用层次结构。
我怀疑,发现错误或任何其他代码分析器可以真正检测未使用的方法,因为方法可能是
答案 6 :(得分:0)
删除未使用的代码(包括未使用的公共方法)是obfuscators做的一件事。问题是你只能通过查看包含它的类来判断是否使用了公共方法。您需要查看将要运行的整个系统,因为可以从任何地方调用公共方法。
针对整个系统运行混淆器(即您的代码和用于运行系统的所有库)可以帮助查找从未调用的公共方法(警告:当然,反射可能会弄乱该结果!)。
答案 7 :(得分:0)
也许crap4j就是你所需要的。它删除了单元测试未达到的所有代码。这当然是最小化您的应用程序的难点。