ajFX provides a frame inference analysis for Java and AspectJ applications. It is a static, compositional source code analysis that is able to infer which locations may/must be modified by a given method or advice body (and whatever code is reachable from that body). These locations are described such that they can be understood in terms of the body's pre-state, i.e. in terms of (fields of) formal parameters or the this object.
To get started, you will need the following:
- Eclipse (tested using Eclipse Kepler and Luna)
- Ekeko, a meta-programming library to query/analyse/transform Java code
- For AspectJ support (optional): AJDT (tested on version 2.2.3) and Ekeko's AspectJ extension
Once this is done:
- Clone/download the ajfx project from GitHub
- Import the project in Eclipse
- Run it as an 'Eclipse application' to start a new instance of Eclipse
- In this new instance, open a Java/AspectJ project that you'd like to analyse
- Right-click the project > Configure > Include in Ekeko queries
- Right-click the project again > Configure > Ekeko Properties and fill in
-no-bodies-for-excluded -src-prec c -f jimple -keep-line-number -app -w -p jb use-original-names:true -p cg.cha
in the "Soot arguments:" text box - Right-click the project again > Configure > Enable Ekeko Soot Analyses (Depending on the size of the project, this might take a few seconds up to a few minutes; the Soot framework is currently converting the project to Jimple code, which is the intermediate representation that ajFX uses..)
- Ekeko > start nREPL (This should open up a Clojure REPL in the original Eclipse instance.)
- In the original Eclipse instance, open up the ekeko_ajfx/core.clj file
- Clojure > Load file in REPL (This should take less than a minute..)
- Clojure > Switch REPL to File's Namespace
- ajFX is now at your disposal (and Ekeko and Soot are too)! Try running
(inspect (analyse-all-bodies))
to analyse all method/advice bodies, and open an Inspector window to browse the results.