Frame inference analysis for Java/AspectJ
Clojure Java
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Ekeko AJFX
.gitattributes
.gitignore
README.md
ajFX.png

README.md

ajFX logo

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.

Getting started

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.