我有兴趣收集一些我可以访问的大型 Java 代码语料库的统计数据。我感兴趣的一些统计数据可能包括某些方法/类的使用频率、某些包的导入频率等等。
我的第一个想法是使用 javaparser ,但该库仅支持 Java 1.5,而我拥有的大部分代码都在 1.6 或更高版本中。
是否有一个库可以从一些 Java 代码中为我提供准确的 AST(即,我可以以某种方式向 javac 请求它吗?),或者是否有更好的方法来解决这个问题(也许是检查字节码)?
最佳答案
不知道准确的 AST,但您当然可以使用 ASM 或 BCEL 等包读取字节码,并且扫描这些数据结构以查找函数调用将相当简单。当然,这可能是在执行了一些早期优化之后,所以它可能不会直接反射(reflect)源...而且它在 JIT 之前,所以它可能不会直接反射(reflect)实际运行的内容。
另一种解决方案是在分析器的控制下运行代码,这可以为您提供来自不同位置的相对或绝对调用频率。
这些都不会为您提供导入数量——这纯粹是一个语法糖细节。但出于同样的原因,我认为这实际上不是一个有意义的数字。
关于Java 语言统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26520414/