从Java源代码中找出使用过的类和方法

时间:2019-03-27 15:09:27

标签: java

对于Java源文件,我想找出:

  • 哪些类使用其他哪些类(完全限定的名称)?
  • 哪些方法调用其他哪些方法(完全限定的名称)?

实现这一目标的合理方法是什么?

编辑:

为了澄清:我想要源代码文件列表作为输入。输出应该是(如上所述)哪个类使用哪个其他类,哪个方法调用哪个其他方法。我不想在运行时检查其他已加载的类,例如使用反射时。

3 个答案:

答案 0 :(得分:4)

您需要将静态分析工具用作STAN独立模式:

  

独立应用程序面向通常不使用IDE的架构师和项目经理。

JArchitect(也可以通过命令行使用)

  

JArchitect是用于静态代码分析的强大工具。它可以提供对复杂代码库的大量见解。使用自定义代码查询,您可以以非常舒适的方式构建自己的规则集。

     

在类浏览器的右键菜单中,JArchitect建议探索一种类型的成员(方法+字段)之间的依赖关系图。

另一个选项是SourceTrail

  

图形可视化提供感兴趣的任何类,方法,字段等及其所有关系的快速概述。该图是完全交互式的。通过专注于相关的节点和边缘,可以使用它遍历代码库。

答案 1 :(得分:2)

不幸的是,反思并不能为您提供执行此操作所需的全部信息。

我已经使用ASM(https://asm.ow2.io/)做到了。

它提供了使用访问者模式遍历所有类的字节码的能力,包括实际的方法实现,您可以从中提取对其他类的引用。

很抱歉,我无法提供实现,因为它是专有的。

请注意,这适用于您的.jar文件,而不适用于您的源文件。如果您真的需要从源头工作,请查看https://github.com/javaparser。但是,实际上,最好使用字节码,因为Java语言会经常更改,而字节码规范却不会。

答案 2 :(得分:-1)

我不确定如何获取列表,但是要确定重构机会,您可以尝试IntelliJ IDEA。它将使项目中未访问的任何方法的签名行变暗。它还将检测在项目中其他位置重复的代码段,因此您可以提取通用代码。