我有一个可以迭代的类列表。使用 Java 有没有办法找出这些类的使用位置,以便我可以将其写到报告中?
我知道我可以在 Eclipse 中找到使用“参考”的方法,但是有太多无法手动执行此操作。所以我需要能够以编程方式做到这一点。任何人都可以给我任何指示吗?
编辑:这是静态分析,也是为非技术人员创建更大的可追溯性报告的一部分。我有全面的 Javadocs,但它们并不“友好”,而且与我需要报告的方式相反。Javadocs 从包开始并向下工作,而我需要从变量级别开始并向上工作。如果那有意义的话。
我有一个可以迭代的类列表。使用 Java 有没有办法找出这些类的使用位置,以便我可以将其写到报告中?
我知道我可以在 Eclipse 中找到使用“参考”的方法,但是有太多无法手动执行此操作。所以我需要能够以编程方式做到这一点。任何人都可以给我任何指示吗?
编辑:这是静态分析,也是为非技术人员创建更大的可追溯性报告的一部分。我有全面的 Javadocs,但它们并不“友好”,而且与我需要报告的方式相反。Javadocs 从包开始并向下工作,而我需要从变量级别开始并向上工作。如果那有意义的话。
还有另一种方法(可能不完整):
在 Google 中搜索“java 递归列出目录和文件”,并获取将递归列出项目中所有 *.java 文件路径/名称的源代码。对于列表中的每个文件:
1:查看文件路径/名称是否在您感兴趣的完全限定文件名列表中。如果是,则记录路径/名称作为匹配项。
2:无论是否匹配,打开文件并将其内容复制到列表集合中。遍历内容列表并查看类名是否存在。如果找到,通过查看它是否与您正在检查的当前文件在同一个包中来确定它的路径。如果是这样,你有一个匹配。如果没有,您需要从 *.import 语句中提取路径,将其添加到类名中,并查看它是否存在于文件路径/名称的递归列表中。如果仍未找到,请将其添加到“未找到”列表(包括找到它的行号),以便您可以手动查看未识别的原因。
3:将所有匹配项添加到“找到的匹配项”列表中。检查列表以确保它看起来正确。
您可以尝试在类中的某处添加堆栈跟踪转储,以隔离您正在寻找的特定案例。
public void someMethodInMyClass()
{
if (conditions_are_met_to_identify)
{
Thread.dumpStack();
}
// ... original code here
}
您可能必须扫描所有来源,并检查导入语句。(照顾*导入..必须为完全合格的类名及其包名设置扫描仪。*)
编辑:为此使用 eclipse 搜索引擎会很棒。也许这就是答案
不确定您要做什么,但如果您想在运行时分析代码,我会使用一个开箱即用的分析器来显示加载的内容和分配的内容。
@开源分析器:开源 Java 分析器
另一方面,如果您想自己执行此操作(在运行时),您可以编写自己的自定义分析器:
您可能还会发现这个很有用(尽管不完全是您想要的):
如何列出在特定类加载器中加载的所有类 http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html
如果您正在寻找的只是检查您的代码库,那么那里也有非常好的工具。@see http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis