Janino download page

### Downloads and change log

Back to JANINO home page

#### Version 2.7.0, Aug 10, 2013 - Download

- Added he 'assert' statement (simplified, ASSERTions are ALWAYS enabled, as if '-ea' were given)
- Added annotations (but not yet annotation declarations)
- Implemented '@Override'
- Dropped support for Java 1.4 and 5

#### Version 2.6.2, May 30, 2013 - Download

- JANINO-148 Support Java 6 class file format
- JANINO-147 JaninoRuntimeException: Cannot "set()" Offset more than once
- JANINO-149 Janino incorrectly accepts String literals with invalid escape characters
- JANINO-150 Special-value Float and Double literals don't unparse correctly
- JANINO-152 Janino does not throw exception when compiling code with exceptions listed in wrong order
- JANINO-155 Compound assignment does not implement boxing conversion
- JANINO-157 Fail to "return x": Assignment conversion not possible from type "java.lang.Object" to type "java.lang.Long"
- JANINO-153 Unable to cast from primitives to classes like Comparable
- Various enhancements to JDISASM

#### Version 2.6.1, June 24, 2010 - Download

- Added version information to the `META-INF/MANIFEST.MF` file of the JANINO JARs.
- Added `CompilerFactoryFactory.getSpecificationVersion()` and `ICompilerFactory.getImplementationVersion()`.
- Fixed up the handling of debug options - added "ICookable.setDebuggingInfo(source, lines, vars)".
- Gave up on "EnumeratorSet" and "DebuggingInfo" - these mimic Java 5 ENUMs and were ugly.

#### Version 2.6.0, May 30, 2010 - Download

This version implements a number of incompatible changes:

- `CompileException` was moved from package `org.codehaus.janino` to package `org.codehaus.commons.compiler` (and so were its buddies `Location`, `LocatedException` and `CausedException`).
- `ParseException` and `ScanException` were removed; all methods that previously threw one or more of `CompileException`, `ParseException` and `ScanException` now throw only `CompileException`. (This is an API simplification honoring the fact that applications rarely want to differentiate between scan, parse and compilation problems).

The core functionality of JANINO (expression evaluator, script evaluator, class body evaluator, simple compiler and Java source class loader) was extracted to new interfaces declared in the new package `org.codehaus.commons.compiler`, while the original API remains unchanged.

A second implementation of the `org.codehaus.commons.compiler` interfaces was added, based on the `javax.tools.JavaCompiler` API that exists since JDK 1.6. This implementation is available in the `commons-compiler-jdk.jar` file.

Rather than instantiating e.g. `org.codehaus.janino.ExpressionEvaluator` directly, applications can now alternatively call `org.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator()`, which will use the first implementation of `IExpressionEvaluator` on the class path (be it `janino.jar` or `commons-compiler-jdk.jar`, or yet another implementation).

The JUNIT regression test suite was restructured so that if differentiates between implementation-independent tests, which are automatically executed against every implementation on the class path, and implementation-specific tests.

Also, the following bugs were fixed:

- JANINO-143 java.lang.ClassFormatError: Duplicate method name&signature in class file Transformer1$1$1
- JANINO-146 Cannot compile on Java 1.6/6 if extended class does not implement an existing bridge method

#### Version 2.5.16, January 26, 2010 - Download

- JANINO-128 java.lang.IllegalAccessError when trying to use function from package-protected superclass.
- JANINO-139 Importing non-existent class does not cause an error
- JANINO-122 static field access through instance variables fails
- JANINO-140 LocatedException (and subclasses such as CompileException) is not serializable
- JANINO-117 UnparseVisitor does not handle Byte or Short Literals
- JANINO-132 Inaccessible methods should be ignored for method resolution
- JANINO-133 Janino failed compiling with ClassCastException when the source code's size is too large
- JANINO-136 Covariant return types for abstract methods fail to compile
- JANINO-127 LocalVariableTable code attribute not created, giving debuggers problems with classfiles
- JANINO-126 ExpressionEvaluator isn't handling NaN correctly
- JANINO-31 IncompatibleClassChangeError when loading nested classes
- JANINO-131 instanceof returns true for null values, instead of false
- JANINO-137 Assignment conversion not possible from type "double[]" to type "double[]"
- JANINO-130 wide versions of IINC and RET are broken
- JANINO-129 incorrect max stack size
- JANINO-62 Support JSR-223 when it is finalized
- JANINO-123 SimpleCompiler throws Exception when using full-qualified Type in Signature

#### Version 2.5.15, June 18, 2008 - Download

- JANINO-110 Fully Qualified .class access fails to compile
- JANINO-111 UnparseVisitor does not handle precedence of operators
- JANINO-112 Access to protected members can fail across package boundaries
- JANINO-114 ArithmeticException in UnitCompiler.getConstantValue
- JANINO-115 Methods that compile to more than 32 KB of bytecode cannot be compiled
- JANINO-117 UnparseVisitor does not handle Byte or Short Literals
- JANINO-118 Contant Pool does not support >32K entries
- JANINO-119 flowAnalysis fails with GOTO_W
- JANINO-120 Janino Compiler Needs Optimizing
- JANINO-121 Some performance optimizations

#### Version 2.5.14, April 27, 2008 - Download

- Switched from CVS to svn (http://svn.codehaus.org/janino).

#### Version 2.5.13, March 9, 2008 - Download

- JANINO-106 Static imports of private fields can cause compiler to throw NPE

#### Version 2.5.12, December 20, 2007 - Download

- JANINO-104 AccessControlException thrown with Janino compiled code under Java Webstart
- JANINO-105 Possible to call a method of an enclosing class as if it was a member of an inner class
- JANINO-96 Feature Request: Obtain parameter information for an evaluated expression

#### Version 2.5.11, September 30, 2007 - Download

- "CompileException" now extends "LocatedException", which extends "CausedException". This eliminates an asymmetry between "ScanException", "ParseException" and "CompileException".

#### Version 2.5.10, September 4, 2007 - Download

- JANINO-98 compilation of overridden static methods done as invokevirtual
- JANINO-101 JCI-53: Stack overflow on cross imports in commons-jci-janino
- JANINO-99 ConcurrentModificationException due to instance variable of Class type initialized using a class literal

#### Version 2.5.9, July 22, 2007 - Download

- JANINO-95 ClassBodyEvaluator base class can be abstract and compile fine although it shouldn't compile
- JANINO-97 ExpressionEvaluator.createFastExpressionEvaluator calls setReturnType

#### Version 2.5.8, June 12, 2007 - Download

- JANINO-79 Overridden method resolution thru the inheritance chain is not correct
- Throw a `RuntimeException` if `cook()` is called more than once.

#### Version 2.5.7, May 19, 2007 - Download

- `janino.jar` is now signed with a dummy certificate.
- `janino.jar` is now published as http://www.janino.net/lib/janino.jar, so remote systems can always download the latest version from a fixed URL.
- JANINO-78 Implement Superclass field access
- JANINO-81 IncompatibleClassChangeError when invoking getClass() on interface references
- JANINO-82 Make Compiler.storeClassFile public
- JANINO-83 Code reuse in PathResourceFinder
- JANINO-84 Filter out non-existant directories in JarDirectoriesResourceFinder
- JANINO-85 Build system improvements
- JANINO-86 Make more classes/constructors public
- JANINO-92 Make(Class,Interface)DeclarationContext public

#### Version 2.5.6, February 26, 2007 - Download

- JANINO-72 Add Autoboxing

#### Version 2.5.5, February 3, 2007 - Download

- JANINO-76 Suboptimal compilation strategy for the string concatenation operator
- Optimized the handling of string concatenation: For sequences of 4 and more operands, the "new StringBuffer(a).append(b).append(c).append(d).toString()" is now used. (For two or three operands, "a.concat(b).concat(c)" is used as before.) Also, if "java.lang.StringBuilder" (the unsynchronized brother of "StringBuffer") is available (since JDK 1.5), it is used. See Tom Gibara's excellent article on his "String Concatenation Benchmark".

#### Version 2.5.4, January 28, 2007 - Download

- JANINO-75 Duplicate Single-Type-Imports and Single-Static-Imports cause compilation errors

#### Version 2.5.3, January 17, 2007 - Download

- Added single static import declarations for fields (e.g. `import static java.util.Collections.EMPTY_MAP`), types (e.g. `import static java.util.Map.Entry`) and methods (e.g. `import static java.util.Arrays.asList`)
- Added static-import-on-demand declarations for fields (e.g. `import static java.util.Collections.*`), types (e.g. `import static java.util.Map.*`) and methods (e.g. `import static java.util.Arrays.*`)

#### Version 2.5.2, January 14, 2007 - Download

- JANINO-71 Explicit constructor invocation in inner classes leads to compilation error
- JANINO-73 Compiler can't find classes anymore (since 2.5.0)

#### Version 2.5.1, November 6, 2006 - Download

- JANINO-68 SimpleCompiler.main run with -help isn't very helpful
- JANINO-69 Unable to resolve reference to var name from within catch block of anon inner class
- JANINO-70 Setting attributes in catch() block causes NullPointerException in UnitCompiler.reclassifyName

#### Version 2.5.0, September 19, 2006 - Download

- Extended `ExpressionEvaluator` and `ScriptEvaluator` with the capability to compile more than one expression/script in one evaluator. This greatly improves the runtime performance and reduces the JVM resource usage if you need to compile many expressions/scripts at the same time.
- Introduced the concept of "auxiliary classes". This allows you to specify individual classes that the expression/script/class body/compilation unit may access although they are not loadable through the `ClassLoader` that was set with `setParentClassLoader()`. In other words: The expression/script/class body/compilation unit executes in a "sandbox", restricted by a `ClassLoader` with minimal peepholes to the classes you specify. This also resolves issue JANINO-66 Security: restrict package access

#### Version 2.4.7, September 11, 2006 - Download

- JANINO-67 classes that cause a LinkageError (duplicate class definition) when loaded

#### Version 2.4.6, August 20, 2006 - Download

- Added some very picky checks on character literals.
- Check for float literal overflow and underflow.
- ExpressionDemo was broken since the *Evaluator refactoring.
- Some minor refactoring.
- Added more tests on float literals.
- Refactoring of ClassBodyDemo and friends (more user friendly command line interface).
- JANINO-64 continue statement not enclosed bug
- JANINO-65 Janino 2.4.5 does not compile with JDK 1.5

#### Version 2.4.5, June 26, 2006 - Download

- Removed the misspelled "ResourceFinder.NO_RESOURCE_FINDER" (use "EMPTY_RESOURCE_FINDER" instead).
- Simplified the self-compile test.
- Cleaned up and simplified the local variables used by the TRY statement.
- JANINO-56 VerifyError in the context of a FINALLY caluse

#### Version 2.4.4, June 18, 2006 - Download

- Replaced `TunnelException` with `ClassNotFoundException(Throwable ex)`, which makes exception handling much clearer. In retrospect, `TunnelExeption` has proven to be a bad concept.
- Made the last missing fields of `Java.Xxx` PUBLIC for AST manipulation.
- JANINO-57 Switch statment compiles space inefficiently for a large case span.
- JANINO-58 Janino issues "Error: For update is unreachable" where JAVAC keeps compiling
- JANINO-59 Patch to stop reporting extra errors
- JANINO-60 StackOverflowError when a local class is used
- JANINO-63 Combination of interface declaration with method that declares a thrown exception cannot be parsed

#### Version 2.4.3, May 11, 2006 - Download

- Added the "default imports" feature to all `*Evaluator`s.
- `Scanner.close()` and all file-related `Scanner` constructors are now deprecated, because (A) they sometimes left input files open and (B) the logic was confusing - it is now strictly the caller's responsibility to open and close input files.
- Complete refactoring of the `*Evaluator` and the `SimpleCompiler` classes. Important notice: `ScriptEvaluator.evaluate()` had to be renamed to `ScriptEvaluator.getClazz()` due to a method signature clash with `ExpressionEvaluator.evaluate()`.
- Improved the JAVADOC of the `*Evaluator` and the `SimpleComplier` classes.
- JANINO-53 Java.NewClassInstance.toString() does not include arguments
- JANINO-54 Code missed out after "if (true) return;"
- JANINO-55 Nested array initializers no longer work in 2.4.2

#### Version 2.4.2, April 24, 2006 - Download

- Fixed some bugs in the access checking (PUBLIC, PROTECTED, PRIVATE).
- Added some tests to `JaninoTests` for class instance creation (basically JLS2 section 15.9.1).
- The `Scanner` now warns about misplaced DOC comments -- hence we need to have a `WarningHandler` installed also on the `Scanner`.
- Inner classes loaded from `.class` files could not be instantiated.
- JANINO-45 Add Parser.getScanner()
- JANINO-48 can't use arrays of inner classes, or secondary type declarations
- JANINO-50 Branch offset out of range exception

#### Version 2.4.1, April 12, 2006 - Download

- JANINO eventually supports access to PRIVATE methods of enclosing/enclosed instances.
- JANINO-46 Add support for setting the warning and error handlings to the ClassLoaders
- JANINO-49 access to public inner class no longer works with 2.3.17+(does with 2.3.16)
- JANINO-50 Branch offset out of range exception
- JANINO-51 Janino cannot handle array types in combination with the Java .class function

#### Version 2.4.0, March 13, 2006 - Download

- Major redesign of the `Java` class hierarchy -- basically the "uplink" of the AST objects is no longer set by a constructor parameter, but by the constructor of the superordinate AST object. As a consequence, the creation order of AST objects is no longer top-down, but bottom-up. This makes code that creates an AST significantly shorter.
- The `UnitCompiler` is now context-free, i.e. it can resolve types, constant values etc. without compiling the unit. This is necessary for the upcoming `JGrep` utility (see below).
- Started work on the new `JGrep` utility -- a command line tool that analyses a set of source files in a highly configurable way.
- JANINO-43 RuntimeException "Cannot relocate branch to unset destination offset" during compilation
- JANINO-50 Branch offset out of range exception

#### Version 2.3.18, February 23, 2006 - Download

- Made the members of `FormalParameter` PUBLIC.
- Empty TRY body generated invalid bytecode.
- Made "throwParseException()" PROTECTED.
- JANINO-41 Janino unreachable error with block statements
- JANINO-42 Invalid bytecode generated when invoking public method of inaccessible base class

#### Version 2.3.17, January 18, 2006 - Download

- Modified the `Enumerator` and `EnumeratorSet` classes, inspired by "Effective Java".
- Implemented access checking (PUBLIC, PROTECTED, PRIVATE).
- JANINO-38 Compiled Code Produces "java.lang.VerifyError: ... Illegal use of nonvirtual function call" At Run Time

#### Version 2.3.16, December 25, 2005 - Download

- JANINO-37 NullPointerException Thrown While Compiling Code w/ inner Class

#### Version 2.3.15, November 9, 2005 - Download

- JANINO-36 RuntimeException in CodeContext.flowAnalysis

#### Version 2.3.14, November 2, 2005 - Download

- Added the `CachingJavaSourceClassLoader`.

#### Version 2.3.13, October 28, 2005 - Download

- Added the missing `Compiler.compile(Resource[])`.

#### Version 2.3.12, October 25, 2005 - Download

- The creation of class files by `org.codehaus.janino.Compiler` is now based on the new `ResourceCreator` class, so they can not only be stored in files but anywhere (e.g. in a database). (Requested by Andreas Schmidt 2005-10-19.)

#### Version 2.3.11, October 19, 2005 - Download

- Added `Traverser` for static code analysis.
- Removed some superfluous getters.
- Renamed some productions from "*Declarator" to "*Declaration". (It is sometimes difficult to understand the difference between the two.)
- Renamed `visit(...)` methods to `accept(...)` for conformance with GoF "Design Patterns".
- JANINO-34 Propose changes to visitor to make it easier to implement

#### Version 2.3.10, October 18, 2005 - Download

- JANINO now works in a JDK 1.5 environment.
- JANINO-28 extending a base method that throws an exception can lead to a compile error

#### Version 2.3.9, October 11, 2005 - Download

- JANINO-29 Non-statement allowed by ScriptEvaluator
- JANINO-31 IncompatibleClassChangeError when loading nested classes
- JANINO-32 Multiplication error

#### Version 2.3.8, August 9, 2005 - Download

- JANINO-27 duplicate variable definitions are allowed
- JANINO-30 Excessive exception declared in some ExpressionEvaluator expressions

#### Version 2.3.7, July 24, 2005 - Download

- Added "build.xml" to "build.properties" to "janino.jar" (requested by Mark Proctor 2005-07-15).
- "janino.jar" is now uploaded to IBIBLIO (requested by Mark Proctor 2005-07-10).
- JANINO-21 Incorrect evaluation of an "if" statement
- JANINO-18 difference in generated classfiles
- JANINO-3 Split janino jar into runtime and utilities; put to ibiblio

#### Version 2.3.6, July 15, 2005 - Download

- Implemented `@deprecated`.
- Implemented warnings on impliclit method invocations.
- Implemented warnings on missing doc (a.k.a. JAVADOC) comments.
- JANINO-20 Add AST nodes for JavaDoc comments
- JANINO-26 exception on interface methods are not returned thru reflection

#### Version 2.3.5, July 06, 2005 - Download

- Added the "AstGenerator", contributed by Eugene Kuleshov.
- JANINO-24 Add support for setting ProtectionDomain on defined classes
- JANINO-22 implicit invocation thru 'this' does not work
- JANINO-23 constant propagation with final not accurate
- JANINO-25 UnitCompile.compile() calls flowAnalysis with wrong string

#### Version 2.3.4, May 25, 2005 - Download

- Extracted the compilation functionality from `Java` to `UnitCompiler`. This involved some minor incompatible changes:
  - Renamed `Java.CompileException` to `CompileException`.
  - Renamed `Visitor` to `Visitor.ComprehensiveVisitor`.
  - Removed `CompilationUnit`, `VariableDeclarator` and `FormalParameter` from the visitors, because they are not virtual.
- JANINO-16 Invalid float/double constants
- JANINO-2 SF [ 1032563 ] "Invalid opcode 196" exception
- JANINO-17 Class Variables defined without trailing ; compile fine, probably shouldn't

#### Version 2.3.3, May 05, 2005 - Download

- JANINO-11 ExtendsType using ClassBodyEvaluator throws java.lang.NullPointerException
- JANINO-15 Huge performance issues on compiling large classes
- JANINO-14 org.codehaus.janino.util.enum is conflicting with Java 5 compiler

#### Version 2.3.2, March 22, 2005 - Download

- Made `Scanner.Location` a top-level class.
- `PackageDeclaration` and `ImportDeclaration` are now AST objects.
- `ResourceFinder.findResource()` no longer returns a `URL` object, but a more abstract `ResourceFinder.Resource` object (requested by Michael Orth 2005-03-22).

#### Version 2.3.1, February 20, 2005 - Download

- JANINO-5 cannot compile try-catch blocks that reference local classes
- JANINO-8 Source-level debugging of JANINO scripts doesn't work
- JANINO-9 Ancient syntax for array return type
- #1105688 undetected uninitialized variable

#### Version 2.3.0, January 31, 2005 - Download

- Switched from "Apache License 2.0" to "New BSD License".
- #1098573 Methods inherited by java.lang.Object ignored for Interfaces
- JANINO-7 ParentClassloader not propagated to ByteArrayClassloader
- JANINO-4 No net.janino.util.PrimitiveWrapper.wrap(boolean v) available ...

#### Version 2.2.0, January 02, 2005 - Download

- Moved CVS and bug tracking to "codehaus.org" (web site still to be done).
- Renamed all packages from "net.janino..." to "org.codehaus.janino...".
- Refactored the `ByteArrayClassLoader` for thread safety.
- Introduced a slight semantic change in the meaning of the `optionalParentClassLoader` parameter of all `*Evaluator` classes (see JAVADOC of `EvaluatorBase(ClassLoader)`).
- #1092344 implied constant promotion aborts compilation
- #1093015 Compiler throws ArrayOutOfBoundsException during Compilation

#### Version 2.1.0, December 09, 2004 - Download

- Switched from GNU "Lesser General Public License" (LGPL) to Apache License 2.0.
- Added `equals()`code> methods to `ByteArrayClassLoader` and `EvaluatorBase`.

#### Version 2.0.17, December 06, 2004 - Download

- #1065416 circularly dependent local class hangs compilation
- #1062519 Janino 2.0.14 miscompiles local classes

#### Version 2.0.16, November 19, 2004 - Download

- #1032563 "Invalid opcode 196" exception

#### Version 2.0.15, November 9, 2004 - Download

- #1057432 int x=2; someMethod(x*=2); doesn't work
- #1061120 SomeClass s=new SomeClass; gets compiled
- Retyped "debuggingInformation" from INT to "DebuggingInformation", which inherits from "EnumeratorSet".
- `Scanner` now allows for explicit initialization of line number and column number (useful if the Java code begins only in the middle of a file.)

#### Version 2.0.14, November 1, 2004 - Download

- #1057380 current build misses class files

#### Version 2.0.13, October 27, 2004 - Download

- More refactoring of the "IClassLoader" hierarchy. Added some nifty `Iterator`s like `NestedIterator`, `TransformingIterator`, and the `IteratorCollection` (a `Collection` that reads its elements from a delegate `Iterator` while it is being iterated for the first time).
- The `net.janino.tools.Disassembler` now has a verbose mode.

#### Version 2.0.12, October 17, 2004 - Download

- Total rewrite of the "IClassLoader" hierarchy. This simplifies the lookup of `IClass`es.
- Cache the return values of `getConstantValue()`.
- Eliminated a lot of compilation warnings.

#### Version 2.0.11, September 27, 2004 - Download

- #1029662 Can't set static final vars to 'null'
- #1029661 Using expressions to set static final variable can fail
- #1029660 Exceptions attribute attached to Code attribute, not Method
- #1035262 x/=y doesn't work
- Performance tuning as proposed by Chris Thiessen 2004-09-15.
- Inserted `BufferedReader`s when reading from files.
- `IClass` now caches the results of its abstract methods.
- `IClassLoader.loadIClass` no longer throws `ClassNotFoundException`s, but returns `null` (save creation of a lot of objects).

#### Version 2.0.10, September 14, 2004 - Download

- `SimpleCompiler`, `ClassBodyEvaluator` and `ScriptEvaluator` now add SOURCE and LINES debugging info, so file name and line number appear in exceptions thrown by generated code. (Requested by Mike Hebert 2004-09-11.)
- Allow for source code level debugging of the same by writing a temporary source code file if the `optionalFileName` parameter of `net.janino.Scanner`'s constructors is `null` and system property `net.janino.source_debugging.enable` is "true". The source code file is written to `net.janino.source_debugging.dir` or the system's default temp directory. (You need to add that directory to your debugger's "source lookup path".)

#### Version 2.0.9, September 5, 2004 - Download

- Unparsing classes generated by `EvaluatorBase` generated no output.
- Optimized compilation of constantly-false IF statements.
- #1001362 null in expression with conditional
- Fixed up JLS2 15.12.2.2.BL2.

#### Version 2.0.8, August 29, 2004 - Download

- Fixed several bugs in the `net.janino.UnparseVisitor`.
- Decimal long literal tokens were misinterpreted as octal.

#### Version 2.0.7, August 25, 2004 - Download

- Implemented the `net.janino.UnparseVisitor` that unparses a parsed construct, e.g. a compilation unit (requested by Mark Proctor).
- Made all nested classes of `net.janino.Java` public to allow for generation of "synthetic" constructs (requested by Mark Proctor).

#### Version 2.0.6, July 23, 2004 - Download

- #995198 Make info public in exceptions
- Introduced base class `net.janino.Scanner.LocatedException` for all JANINO-related exceptions.
- Fixed some JDK 1.2.2 compatibility problems.

#### Version 2.0.5, July 12, 2004 - Download

- #988796 compilation error from short-circuiting
- Implemented the concept of "fast" expression evaluators and script evaluators, as proposed by Volker Augustin 2004-06-14.

#### Version 2.0.4, June 29, 2004 - Download

- #913174 String concat operation throws NullPointerException
- #981586 ClassCastException during compilation
- #981711 call to static method via object causes compilation failure

#### Version 2.0.3, May 31, 2004 - Download

- `net.janino.ExpressionEvaluator` now supports `null` expression types; this auto-wraps primitive values as necessary. (Requested by Amir Bar-Or 2004-05-31).

#### Version 2.0.2, April 15, 2004 - Download

- Janino now optionally creates warnings.
- Added warnings about implicit access to fields
- Added warnings about violations of SUN's naming conventions (JLS2 6.8)

#### Version 2.0.1, April 11, 2004 - Download

- #931385 Janino 2.0 throwing exception on arrays of java.io.File

#### Version 2.0, April 4, 2004 - Download

A major milestone... Janino now supports member types, local classes and anonymous classes. Therefore you can legitimally call a fully implemented JavaTM compiler!

A good time to open a bottle of champagne...

#### Version 1.0.22, February 16, 2004

- `net.janino.Compiler` now reports up to 20 compile errors before it gives up. (Notice that scanning, parsing and I/O exceptions are still fatal and terminate compilation.)

#### Version 1.0.21, February 03, 2004

- Complicated array instantiations did not work.
- Replaced Java's URLClassLoader with the custom PathClassLoader. This solves the problems with case-insensitive file names.
- #885938 static references to "this"
- #885930 label not breakable error

#### Version 1.0.20, January 27, 2004

- Implemented line number tables ("-g:lines") and source file information ("-g:source").

#### Version 1.0.19, January 24, 2004

- Fixed one very stupid `NullPointerException` in the `AntCompilerAdapter`.
- Improved the JAVADOC of the `ExpressionEvaluator` and the `ScriptEvaluator`.

#### Version 1.0.18, January 24, 2004

- Fixed up resolution of class names (JLS 6.5.5.2).

#### Version 1.0.17, January 21, 2004

- Implemented non-primitive class literals.
- Fixed up the "if statements and reachability" issue.
- #864241 Destination for AntCompiler

#### Version 1.0.16, January 17, 2004

- Fixed one "Invocation of constructor/method ... is ambiguous" bug reported by Chris Cleveland 2004-01-14 03:26.
- #879380 Missing class

#### Version 1.0.15, January 17, 2004

- #875632 net.Janino.Compiler throws NoClassFoundError
- #876568 Incorrect switch statement parsing
- #876583 Sourcepath not searched for interface files

#### Version 1.0.14, January 12, 2004

- #875624 Operators |^&*/%+- kill const'ness
- #875625 Shift operators throw Exceptions during compilation
- #875626 Instanceof does not work for interface types
- #875627 Instanceof does not work for array types
- #875628 Superclass fields inaccessible
- #875629 Non-CCN try statement causes RuntimeException
- #875631 Return in try statement causes RuntimeException
- #875636 Zero constants cause ScanExceptions
- #875639 Reading access to local FLOAT variable causes RuntimeExcepti
- #875640 Cast kills const'ness

#### Version 1.0.13, January 8, 2004

- `Compiler` and `AntCompilerAdapter` now provide for the "extdirs" and "bootclasspath" features.
- #873297 "Unknown variable or type X" if class X is already compiled
- #872637 Calling methods on super()

#### Version 1.0.12, January 7, 2004

- The `AntCompilerAdapter` now honors most of the options that ANT passes to it.

#### Version 1.0.11, January 6, 2004

- #871317 Compiler: Classpath broken

#### Version 1.0.10, January 4, 2004

- #869750 (1) IllegalAccessError
- #869750 (2) Native method must (not) have a body
- #869750 (3) Duplicate imports lead to CompileExceptions
- #869750 (4) Initializer of non-static field cannot access non-static fields of same class
- #869750 (5) continue with label NYI
- #869750 (6) Inconsistent expression types
- #869750 (7) If statement with constant condition leads to unexamined code
- #869750 (8) Narrowing reference conversion from Array to base array broken

#### Version 1.0.9, January 3, 2004

- #868686 Errors when method and variable have same name
- #868688 Can't find correct method
- #868691 Can't return constant defined in interface
- #868692 Can't return constant defined in interface, second error

#### Version 1.0.8, January 2, 2004

- Moved the "janino" script to directory "bin".
- Moved "janino.jar" to directory "lib".
- #868689 Switch doesn't support char arguments
- #868967 Class file broken if class implements interfaces
- #868690 Cast doesn't look at all interfaces supported by object

#### Version 1.0.7, December 25, 2003

- #842362 If/else with return statements results in RuntimeException
- #864232 Doesn't like .001
- #864234 Problem with super()
- #864236 Doesn't like hex
- #864238 Problem with this()
- #864246 Chokes on odd chars

#### Version 1.0.6, December 15, 2003

- Added the "JavaSourceClassLoader" (requested by Richard Lewis 2003-11-14) and the "janino" utility that scans, parses, compiles, loads and executes classes on-the-fly.

#### Version 1.0.5, November 26, 2003

- #845459 Use Janino with Jasper

#### Version 1.0.4, November 18, 2003

- #842362 SimpleCompiler.class not in jar lib
- #844641 Declaration of "final" local variables broken
- #844642 "default:" label in "switch" statement sometimes broken
- #844645 "case Integer.MAX_VALUE" broken
- Started work on an ANT compiler adapter... still very experimental.

#### Version 1.0.3, November 12, 2003

- #837537 else without if

#### Version 1.0.2, October 30, 2003

- #831370 Unicode escapes broken
- #831374 Smallest value for numeric literals not possible
- Added a JUnit test suite (still very incomplete).

#### Version 1.0.1, October 23, 2003

- #828880 Assignment of primitive constants with certain types broken
- #829186 Access to elements of arrays of byte/char/short/boolean broken

#### Version 1.0, October 20, 2003

- Wow, version 1.0 finally made it. If you also feel that Janino 1.0 were a good reason to drink a glass of champagne, do not hesitate. (Maybe, as a sign of recognition, you could send me the open bottle and I'll drink it up ;-) My postal address is on janino.net)

#### Version 0.3.17, October 09, 2003 (not released)

- Methods declared in interfaces of object were not found when invoked (reported by Fabrice Carnet 2003-10-07).
- java.lang.VerifyError when loading a class compiled by Janino which invokes a method of an interface with more than zero parameters (reported by Fabrice Carnet 2003-10-07).
- ExpressionEvaluator, ScriptEvaluator and ClassBodyEvaluator now have constructors that allow for the specification of class and/or method name (requested by Fabrice Carnet 2003-10-07).

#### Version 0.3.16, October 06, 2003 (not released)

- Basically a complete rewrite of the IClass loading mechanism. This solves many problems related to using Janino with custom ClassLoaders (e.g. in J2EE environments). (Reported by Laurent Millet 2003-09-24.)

#### Version 0.3.15, September 12, 2003

- "net.janino.*Evaluator" now have constructor variants that allow the specification of extended / implemented types. This allows for providing a base class that supplies static "helper functions" (e.g. "println()"). (Requested by Till Brychcy 2003-09-10.)

#### Version 0.3.14, July 27, 2003

- "net.janino.Compiler" can now compile a set of source files with forward references (requested by Richard Lewis 2003-07-24).
- Documented the "import" feature of ScriptEvaluator and ExpressionEvaluator.
- "Outer.Inner" was not properly resolved within ambiguous names.

#### Version 0.3.13, July 6, 2003

- Rewrote the "ClassBodyEvaluator"; can now be instantiated.
- "ClassBodyEvaluator" can now generate a class that extends / implements classes / interfaces (Requested by Richard Lewis 2003-06-28).
- Cleaned up "EvaluatorBase"; eliminating code duplicated between the various "*Evaluator" classes.

#### Version 0.3.12, June 4, 2003

- Fixed up method invocation conversion (reported by Antony Miguel 2003-06-02).
- Fixed a problem with for/while/do loops with constant true conditions. (Reported by Antony Miguel 2003-06-02).
- Made tons of methods and classes PUBLIC, as proposed by Antony Miguel 2003-06-03.

#### Version 0.3.11, June 1, 2003

- Implemented "synchronized" statement (requested by Antony Miguel 2003-05-22).
- Moved common functionality from "ExpressionEvaluator", "ScriptEvaluator" and "ClassBodyEvaluator" into a common base class "EvaluatorBase".
- The generated class files and the `IClassLoader` used to load classes defined outside the current compilation unit are now stored in thread-local globals. The `IClassLoader` also holds the formerly global `IClass` cache, which caused a memory leak (reported by Fabrice Carnet 2003-05-20).
- `IClass.isAssignableFrom(net.janino.IClass)` did not handle primitive types (reported by Fabrice Carnet 2003-05-20).
- Multiple expressions, scripts and class bodies can now be loaded into the same `ClassLoader`, if that is a `ByteArrayClassLoader`. This is necessary if the expressions, scripts and classes need to refer to each other. (Requested by Fabirce Carnet 2003-05-20.)
- A "for" statement with an empty condition (e.g. "for(;;)") caused a `java.lang.NullPointerException`.
- The `net.janino.ClassLoaderIClassLoader.ReflectionIClass` holds a map that guarantees that `java.lang.Class`es and `IClass`es map one-to-one. This posed a memory leak. (Reported by Fabrice Carnet 2003-05-20.)
- Documented the `ClassBodyEvaluator`.

#### Version 0.3.10, April 22, 2003

- Fixed up invocation of interface methods (reported by Reimond Bernstein 2003-04-14).
- Added references to types in same package, but different compilation unit.
- Fixed up C-style array variable declaration ("int a[] = ...") (reported by Reimond Bernstein 2003-04-14).

#### Version 0.3.9, April 02, 2003

- Added the "ClassBodyEvaluator" and the "ClassBodyDemo" class. These allow you to compile a "class body", i.e. a series of methods, variable declarations etc. (requested by Fabrice Carnet 2003-03-18).
- Fixed up "IClass.getArrayType()" which only worked for loaded classes, but not for classes in the current compilation unit.
- The `java.lang.ClassLoader` used to load the just-compiled class now uses as its parent the current thread's context class loader (reported by Fabrice Carnet 2003-03-26).

#### Version 0.3.8, March 05, 2003

- Fixed a bug in the flow analysis code (caused a compile-time error) (reported by Fu Li Chen 2003-02-21).
- "IClass" now uses "Thread.currentThread().getContextClassLoader().loadClass()" instead of "Class.forName()" (feature requested by Dain Sundtrom 2002-02-16).

#### Version 0.3.7, November 26, 2002

- Added "this" (reference to current instance). Added primitive class literals (e.g. "int.class"). Fixed several showstopper bugs. Added limited support for member classes.

#### Version 0.3.6, November 22, 2002

- Added reference comparison. Added ScriptEvaluator constructors that read from InputStream, Reader or Scanner.

#### Version 0.3.5, November 14, 2002

- Only the last import-on-demand directive in a compilation unit did work; using a class imported by an amport-on-demand directive other than the last one caused a compilation error. (Reported by Audrius Meskauskas 2002-11-14.)

#### Version 0.3.4, November 9, 2002

- Updated the overview page.

#### Version 0.3.3, October 26, 2002

- Renamed "ExpressionTest" and "ScriptTest" to "...Demo". Fixed up several JAVADOC bugs. "ExpressionEvaluator" now has a "thrownExceptions" parameter. Added support for "void" type expressions to "ExpressionEvaluator". Added JAVADOC comments. Clean up. Fixed a bug in "AmbiguousName.reclassify()".

#### Version 0.3.2, October 21, 2002

- Fixed a few more bugs reported by Jimmy.

#### Version 0.3.1, October 13, 2002

- Fixed an ArrayStoreException in ScriptEvaluator that was reported by Russell White 2002-06-25.
- Added reclassification of fully qualified type names: E.g. cast operation "(HashMap) xyz" did work, but "(java.util.HashMap) xyz" didn't. Reported by Jimmy 2002-10-13.

#### Version 0.3, May 25, 2002

- Added most missing language elements that I planned to add. The JLS is now almost completely implemented, except for nested classes and interfaces.
- This is the first version of JANINO that I will "advertise". Let's see if anybody wants to use the tool... After all it's a 80 percent complete JavaTM compiler in only 11000+ (well-documented) lines of code!

#### Version 0.2, April 28, 2002

- Almost a rewrite. Added several painfully missing language elements.
- Added more JAVADOC.

#### Version 0.1.1, November 09, 2001

- Added missing sample source files to the runtime package.
- Added `break` and `continue`.
- Added lots of JAVADOC comments.

#### Version 0.1, October 30, 2001

- Initial release

Signed JAR files of the latest version: commons-compiler.jar janino.jar commons-compiler-jdk.jar