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:
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 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 base your extension to a specific commit of ExtendJ and upgrade only if you have good test coverage that can ensure your extension keeps working.
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.
ExtendJ supports Java 5-8 to various levels of compliance. Our goal is to eventually perfectly implement the Java specifications. We work toward improving compliance by finding and fixing compliance bugs. This requires a lot of testing, and we are very thankful for any compliance issues that you report. Please look at the compiance issues page for more information. If you encounter a Java compliance error, please report it to our issue tracker.
To test compatibility we use continuous integration to compile and test Open Source projects with ExtendJ. Currently each commit of ExtendJ is tested on Ant 1.9.9, Antlr 4.7.1, JaCoP 4.0.0, and JUnit 4.12.
ExtendJ was originally created by Torbjörn Ekman at Lund University. Improvements have been made by several contributors over the years:
ExtendJ is currently maintained by Jesper Öqvist. Issues can be reported on the ExtendJ Issue Tracker.
The latest ExtendJ release is 8.1.1.