ExtendJ - The JastAdd Extensible Java Compiler

ExtendJ, previously known as JastAddJ, is an extensible Java compiler built using the declarative attribute grammar system JastAdd. ExtendJ has a modular architecture that allows features to be added, removed, and combined.

Features of ExtendJ include:

  • Modular, extensible construction.
  • Declarative attributes are used rather than visitors.
  • Java 6, 7, and 8 support.
  • Semantic analysis and bytecode generation.

ExtendJ might suit your project well if you want to develop static analysis for Java, or if you want to prototype new Java language features.

Please note that ExtendJ is a research project, and while our goal is to maintain the compiler and keep it compatible with Java, some parts are not fully compatible. For example, Java 8 bytecode generation is not fully supported yet.

By fixing bugs and refactoring ExtendJ we constantly risk breaking extension compatibility, please keep this in mind if you plan on building an extension. We recommended that you lock your extension to a specific commit of ExtendJ and upgrade only if you have good test coverage that can ensure your extension keeps working.

Getting Started

We have some useful material for new developers on the Getting Started page.

If you just want a quick introduction, take a look at our tutorial page from the SPLASH 2015 tutorial on ExtendJ.

Java Compliance

We are aware of some Java compliance issues which we hope to fix in the future. These are listed on the compiance issues page. If you encounter a Java compliance error, please check the known issues before you create a new issue on our issue tracker.

Development History

ExtendJ was originally created by Torbjörn Ekman at Lund University. Improvements have been made by several contributors over the years:

  • Torbjörn Ekman developed the original compiler.
  • Emma Söderberg worked on refactoring type lookup to make it more declarative.
  • Jesper Öqvist worked on the Java 7 extension, and many bug fixes / refactorings since then.
  • Erik Hogeman implemented Java 8 support.

ExtendJ is currently maintained by Jesper Öqvist. Issues can be reported on the ExtendJ Issue Tracker.

ExtendJ is provided as Open Source under the Modified BSD License. Links to our Git repositories can be found on the source code page.

The latest ExtendJ release is 8.0.1.