Java以编程方式查找代码中使用类的位置

时间:2013-11-13 17:30:12

标签: java

我有一个可以迭代的类列表。使用Java是否有办法找出这些类的使用位置,以便我可以将其写入报告?

我知道我可以在Eclipse中找到使用'References'但是有太多人无法手动执行此操作。所以我需要能够以编程方式执行此操作。有人可以给我任何指示吗?

编辑: 这是静态分析,是为非技术人员创建更大的可追溯性报告的一部分。我有全面的Javadocs,但它们并不“友好”,而且与我需要报告的方向相反。 Javadocs从包开始向下工作,而我需要启动一个变量级别并向上工作。如果这是有道理的。

4 个答案:

答案 0 :(得分:0)

您可以尝试在类中的某处添加一个stacktrace转储,以隔离您要查找的特定案例。

public void someMethodInMyClass()
{
    if (conditions_are_met_to_identify)
    {
        Thread.dumpStack();
    }
    // ... original code here
}

答案 1 :(得分:0)

您可能必须扫描所有来源,并检查导入语句。 (照顾*进口..必须为完全合格的类名及其包名设置扫描仪。*)

编辑:为此使用eclipse搜索引擎会很棒。也许是here is the answer

答案 2 :(得分:0)

还有另一种方法(可能不完整):

在Google上搜索“java递归列出目录和文件”,并获取将以递归方式列出项目中所有* .java文件路径/名称的源代码。 对于列表中的每个文件:

1:查看文件路径/名称是否在您感兴趣的完全限定文件名列表中。如果是,则记录为路径/名称作为匹配。

2:无论是否匹配,打开文件并将其内容复制到List集合。遍历内容列表,查看是否存在类名。如果找到,请通过查看它是否与您正在检查的当前文件位于同一个包中来确定其路径。如果是这样,你有一个匹配。如果没有,则需要从* .import语句中提取路径,将其添加到类名中,并查看它是否存在于文件路径/名称的递归列表中。如果仍未找到,请将其添加到“未找到”列表中(包括找到的行号),以便您可以手动查看未识别的原因。

3:将所有匹配项添加到“找到的匹配项”列表中。检查列表以确保它看起来正确。

答案 3 :(得分:0)

不确定你要做什么,但是如果你想在运行时分析代码,我会使用一个开箱即用的分析器来显示加载的内容和分配的内容。

@Open源分析器:Open Source Java Profilers

另一方面,如果你想自己这样做(在运行时),你可以编写自己的自定义探查器:

How to write a profiler?

您可能还会发现这个有用(尽管不完全是您想要的):

How can I list all classes loaded in a specific class loader 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