Java 是否有一种工具可以根据一组已知的;“用过的”;上课?

Java 是否有一种工具可以根据一组已知的;“用过的”;上课?,java,refactoring,Java,Refactoring,我正在寻找一种工具,当给定一组种子类时,它可以获取大量类并搜索未使用的方法/变量。我的目标是重新重构大量的类,这样我就可以从中只提取所需的内容(种子类使用的内容) 当我说种子类时,我指的是一组类,用作确定哪些未使用的入口点。例如,如果类A调用类B,类C调用类D,但唯一的种子类是类A,那么类C和类D都应该被视为未使用的类。我正在寻找的工具应该能够基于种子类集给出未使用的类/方法/变量。这样的工具存在吗?Eclipse的Java错误/警告设置将通过下面显示的未使用的本地或私有成员设置帮助您查找未使用

我正在寻找一种工具,当给定一组种子类时,它可以获取大量类并搜索未使用的方法/变量。我的目标是重新重构大量的类,这样我就可以从中只提取所需的内容(种子类使用的内容)


当我说种子类时,我指的是一组类,用作确定哪些未使用的入口点。例如,如果类A调用类B,类C调用类D,但唯一的种子类是类A,那么类C和类D都应该被视为未使用的类。我正在寻找的工具应该能够基于种子类集给出未使用的类/方法/变量。这样的工具存在吗?

Eclipse的Java错误/警告设置将通过下面显示的未使用的本地或私有成员设置帮助您查找未使用的变量。未使用的方法通知应通过类似设置进行控制

未使用的导入设置,就在屏幕截图中突出显示的行上方,应该有助于查找未使用的类,但不能按您想要的比例。举个例子,我认为Eclipse不会将类C或D识别为未使用的,因为我认为它无法区分“种子组”和“大组”


您应该看看语义设计(我的公司)有这样一个针对Java 1.4的工具。您可以指定一组Java源文件,本质上是种子类。它返回两个结果:

  • 声明列表(及其精确的源代码位置) 对于种子来说是无用的 (包括dead的传递闭包)
  • 提供的代码的修订版本,删除了死声明
如果您喜欢在第一组中看到的内容,可以使用修改后的代码。如果第一个集合列出了您应该在已使用列表中列出的内容,请将其添加到种子集合并再次运行

它假定您没有使用任意反射(如果使用,只需列出这些反射) 可能被反射检查的类。不,没有简单的方法)


我们正在为Java1.5/6/7开发一个,希望在今年夏天完成。如果有人感兴趣,我们可以将1.4版本用于实验。

我最初打算建议Eclipse,但我不确定“种子类”是什么意思。你能澄清一下吗?@Lord Torgamus:+1,Eclipse会自动向您显示未使用的类/方法/变量。@Lord Torgamus:种子集是您启动算法的集合,在本例中,它用于构建调用图。西恩。(至少差不多)是根集。@lars,我对这个词大体上很熟悉,但我不明白在这种情况下它是什么意思。当然,你需要其他的课程来了解你感兴趣的课程是否正在被使用,但它们在我看来并不是真正的种子。。。“我可能分析过度了。”约拿,既然你认为这是一个合理的解释,我补充了我的评论作为完整的答案。如果你不知道的话,你实际上可以自定义高亮显示的严重性。当我说种子类时,我指的是一组类,用作确定哪些未被使用的入口点。例如,类A调用类B,类C调用类D,如果种子类是类A,那么类C和类D被认为是未使用的类。我正在寻找的工具应该能够从种子类集中给出未使用的类/方法/变量。嗯,那么这个答案对你来说并不完美。在您的示例中,我不认为有任何方法可以将B类标记为未使用。不过,它在其他方面仍然会有所帮助。我的目标是根据种子类的使用情况重新考虑现有代码,然后生成一个包含所有所需内容的紧凑jar。今天,我们有这么多的类,从种子类的角度来看,有些类根本不能使用,有些类被部分使用(它们可能有其他与种子类无关的依赖关系)。我们使用的是JDK1.6,但是如果您有JDK1.4的内容,我当然想尝试一下。此外,我们主要使用类(带有完整的调试信息)而不是java源代码来完成此任务,因此如果您的工具能够同时处理java源代码和类,那将非常好。@shean chang:通过我的简历中的电子邮件与我联系。