Clone wiki

ppa / Changelog



  • PPA can now produce bytecode from partial programs. Look at method PPAUtil.compileCU() for more info.
  • To allow PPA to produce bytecode, a lot of small bugs had to be fixed and additional information (e.g., modifiers) had to be inferred. For example, super method and field references are now correctly parsed and inferred.
  • Added initial support for a headless version of PPAUtil. If you want to run PPA in a GUI-less environment, please use ca.mcgill.cs.swevo.ppa.util.PPACoreUtil.
  • Released on June 3rd 2011.


  • PPA now works on Eclipse 3.6 (but it no longer works on 3.5).
  • The Eclipse 3.6 compiler now correctly recognizes most local variables in anonymous classes.
  • Please use the new update site for this new line of development:
  • Released on June 29th 2010.


  • Fixed a few major bugs related to generics and anonymous classes. Thanks to David Kawrykow for reporting these bugs.
  • PPA now correctly sets the isAnnotation flag on types binding. More flags will be set in future releases.
  • PPA is now thread safe and can execute multiple parallel requests through PPAUtil. Each request will be executed in its own Java project. For example, four concurrent requests will create four temporary Java projects. The maximum number of concurrent requests can be set in the PPA preference page.
    • To make a concurrent request, call one of PPAUtil methods with a request name, e.g., PPAUtil.getCU(file, options, "myRequest1");
    • You can make multiple calls to PPAUtil using the same request name: PPA then uses the same Java project. This is useful if you want to analyze multiple compilation units from the same partial program without calling the PPAUtil.getCUs(...) method.
    • Once you are done, call the PPAUtil.cleanUpAll("myRequest1") method to release the temporary Java project and to make it available for other requests. You do not have to call this method if you close Eclipse between requests.
    • If you do not wish to submit a request name, you can call the same PPAUtil methods, e.g., PPAUtil.getCU(file, options). PPA will use the current thread name as the request name. This works well in single threaded program or in programs where the same thread is doing the analysis and the cleanup. These methods also make sure that PPA is backward compatible with previous releases.
    • On a decent computer with multiple cores, you will see an improvement if you make parallel requests. For example, on my computer, I could parse twice as many compilation units using four threads vs. one thread. This means though that the performance does not increase linearly with the number of threads.
  • This is likely the last release supporting Eclipse 3.5.2. A new release supporting Eclipse 3.6 is likely to be published in early July.
  • Released on June 29th 2010.


  • Fixed a bug when comparing two types and one of their declaring class is null. Thanks to Yueqi Li for reporting this bug.
  • Added inference of array types of local variables in anonymous classes.
  • Warning: due to an Eclipse compiler limitation, the type of a local variable in an anoymous class is not propagated to the uses of that variable. Consequently, the type of the variable will often be UNKNOWN. I have no plan to implement a workaround for the near future because this would require significant development (there is no clean and easy way of doing this).
  • Released on December 11th 2009.


  • Added support for Eclipse 3.5 (but had to drop support for Eclipse 3.4).
  • Finally added support for the default package.
  • Released on October 20th 2009.


  • Fixed a bug with compatible types and null (e.g., null and Object should match when searching for a method).
  • Fixed a bug where the container's type of a field was not properly inferred. Thanks to Puneet Kapur for reporting this bug.
  • Made wrong field case consistent: when PPA encounters an impossible field (e.g.,, the field is still created as being contained by String, but String does not contain foo. This is a rare case (uncompilable code or jdk class shadowing), but in the future, I plan to let the user decides the behaviour for such a case through an option in PPAEngine.


  • Added inference support for super method invocation.
  • Fixed another bug related to fully qualified name.


  • Fixed a bug that incorrectly inferred the type of a variable that was declared with its fully qualified type. Thanks to Ekwa Duala-Ekoko for reporting this bug.


  • Added constructor inference strategy and constructor member inference.
  • Added array access inference strategy.


  • Constructors are correctly handled now: the name of a constructor is no longer <init>, but the name of the class. <init> is still used for anonymous classes, but this name is provided by Eclipse and not PPA. The name of constructors should now be consistent with the Eclipse API.
  • Changed a warn to an info notification: the log file should be shorter now because it only reports statements with a log level >= warning.


  • PPA now handles Enum types (i.e., methods like name() are correctly resolved and NPE are no longer thrown).
  • UI Actions (e.g., Run PPA (file)) no longer hangs with large files: a progress monitor was added to address the issue. Thanks to Joel Ossher for reporting these bugs.


  • Added the missing log4j properties file to the build. Thanks to Joel Ossher for reporting this bug.


  • Added the following inference strategies: binary, unary, array index, condition.
  • Bug fixes.


  • Qualified Names bug fixes.
  • More support for generics.


  • First release of PPA.
  • Syntax Disambiguation
  • Support for single source file analysis mode (no global mode for now).
  • Support for enabling/disabling syntax disambiguation, type inference and method binding passes.
  • Basic inference strategies: assignment, return, method binding
  • Basic support for Code snippets
  • Basic support for Java 1.5