对于Java源文件,我想找出:
实现这一目标的合理方法是什么?
编辑:
为了澄清:我想要源代码文件列表作为输入。输出应该是(如上所述)哪个类使用哪个其他类,哪个方法调用哪个其他方法。我不想在运行时检查其他已加载的类,例如使用反射时。
答案 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。它将使项目中未访问的任何方法的签名行变暗。它还将检测在项目中其他位置重复的代码段,因此您可以提取通用代码。