I have read a bit about Crystal SAF, a static analysis framework for Eclipse from CMU:<p><a href="http://code.google.com/p/crystalsaf/" rel="nofollow">http://code.google.com/p/crystalsaf/</a><p>What appealed to me was that it seemed to have a nice API against which one can write his own analyses. It exposes Java code at a granularity of control flow -- homogenization of for loops, while loops, etc. FindBugs works really well, and I use it on a reasonably large production codebase. However, extending it doesn't seem like much fun as one must express patterns in terms of Java bytecode! I tried using Crystal's built-in analyses on the same codebase upon which I use FindBugs, but it failed with an NPE.<p>Also, Soot from McGill (<a href="http://www.sable.mcgill.ca/soot/" rel="nofollow">http://www.sable.mcgill.ca/soot/</a>) seems worthy of consideration although the code is a bit creaky (it's dates back to at least 98, I think). It includes four different representations of Java code in various states between source code and byte code. Also, there are a lot of papers, theses, etc. which document various parts of the package.