您好我想开始玩java源代码的静态分析。首先,直接解析我的源代码树似乎最简单,但是假设有针对此的API。特别是拥有一个允许代码的API会很好:
for (MetaClass m : mySourcePackage.getClasses())
{
System.out.println(m.getMethods().size());
...
}
当然,对于任何给定的类,你可以使用反射来做到这一点 - 但我更感兴趣的是从头开始静态分析整个源代码包 - 并逐个遍历类(例如,评估事物)像测试覆盖率,最大线等...)。
是否有用于进行此类元分析的高质量开源框架(或者,是否可以使用某个类路径启动JVM并在JVM内部进行此类分析)?
请记住,我并不特别担心DI和反射之类的陷阱(至少在这一点上不是这样)。
答案 0 :(得分:3)
Findbugs可以被视为静态分析的框架。您可以实施具有特定目标的新探测器。 "How To" tutorial
此外,这里有一些图书馆涵盖了你提到的目标:
答案 1 :(得分:2)
答案 2 :(得分:1)
Javalib / Sawja是一个用于在Caml中为Java编写静态分析器的库。
它提供了静态分析所需的许多构建块,包括基元:
文档非常好,如果我没记错的话,该发行版包含几个例子可以帮助您入门。
鉴于这一切,实现您描述的源代码指标应该快速而简单。例如,下面是一个简短的,未经测试的片段,旨在计算给定类中的方法数量:
open Sawja_pack
open Javalib_pack
let size methodmap =
JBasics.MethodMap.fold (fun _ _ count -> count+1) methodmap 0
let main classname classpath =
let interface_or_class = Javalib.get_class classpath (JBasics.make_cn classname) in
let all_concrete_methods= Javalib.get_concrete_methods interface_or_class in
print_int (size all_concrete_methods);
exit 0
答案 3 :(得分:0)
如果您对代码测试覆盖率的静态分析感兴趣,可以使用Eclipse的Cobertura - 和eCobertura插件。