Sawja: Static Analysis Workshop for Java Applications
Javalib/Sawja is an OCaml platform for the development of static analyses of Java bytecode programs.
Javalib is a library to parse Java .class file into OCaml data structure, thus enabling the OCaml programmer to extract informations from class files, to manipulate and to generate valid class files. The library is maintained by the CELTIQUE team. It is distributed under the GNU General Public License.
On top of this library, we have developed the Sawja library that provides a high level representation of Java bytecode programs. Whereas Javalib is dedicated to isolated classes, Sawja handles bytecode programs with their class hierarchy and with control flow algorithms. Sawja provides some stackless intermediate representations of code. The transformation algorithm, common to these representations, has been formalized and proved to be semantics-preserving (see paragraph 6.1.2 ). This software is distributed under the GNU General Public License.
The Null-ability Inference Tool is based on this library. It is a tool  ,  to find suitable annotations for fields, method parameters and return values. It works at the bytecode level (on .class files or .jar files) so it can be used on programs where the source is not available. The tool has been presented by Laurent Hubert at JavaOne 2009 on the INRIA stand. This software is distributed under the GNU General Public License.