Downloads and change log
Back to the JANINO home page
Current snapshot version (only available as source code)
Version 3.0.6, 2016-09-20
- Replaced the ANT-based deployment to oss.sonatype.org with MAVEN.
Version 3.0.5, 2016-09-15
- Module "commons-compiler" had the wrong packaging.
Version 3.0.4, 2016-09-15
- Module "janino-parent" was not staged.
Version 3.0.3, 2016-09-15
- Maven module dependencies didn't work.
Version 3.0.2, 2016-09-15
Version 3.0.1, August 22, 2016 - Download
- Implemented enum declarations.
- Implemented underscores in integer and floating-point literals.
- Implemented hexadecimal floating-point literals.
- Implemented binary integer literals.
Merged pull request #3: When adding an entry into
constant pool, it's index should be <= 65534, or <= 65533 if it's wide.
Major refactoring and simplification of the scanner; the "doc comment" and "expect greater" features were moved
to the parser (where they actually belong).
- Implemented the enum switch statement.
- Class literals in interface field initializers caused errors in the "flow analysis" phase.
IExpressionEvaluator: Marked the "ANY_TYPE" feature as deprecated.
It implements sort of an "autoboxing" mechanism, which is unnecessary since Java 5.
JSH: Added the "interactive mode", and thus moved the tool from project "commons-compiler" to project "janino",
because the specific parsing for interactive mode is only possible with a JANINO-dependent "StatementEvaluator"
enum.values()" and "
Version 3.0.0, July 7, 2016 - Download
After a relative long period of little development, new features appear on the horizon! Enums and annotations
finally made it into JANINO...
- JANINO-186: Code size error message should include method name: Also report when the constant pool size limit is exceeded.
- JANINO-185: Improve logging: Replaced good ol' "if (DEBUG) System.err.println(...)" with "java.util.logging".
- "org.codehaus.janino.ScriptEvaluator" now supports the concept of "local methods".
- Implemented annotations (declarations and uses)
- Implemented enums (uses only)
- Added (limited) support for method type parameters.
- Added support for annotations on package declarations.
- Added an "architectural overview" in the JAVADOC.
Version 2.7.8, January 30, 2015 - Download
- JANINO-186: Code size error message should include method name
Version 2.7.7, December 6, 2014 - Download
- JANINO-182: Reference types "java.lang.Double" and "java.lang.Float" don't match
- JANINO-184: "Operand stack incosistent..." exception while compiling legal (but dead) code
Version 2.7.6, August 16, 2014 - Download
'IClass.findIMethod(name, parameterTypes)' now ignores synthetic bridge methods by picking the method with the
most significant return type.
- JANINO-180: NullPointerException with JDK8
Reclassification of 'empty package types' was forgotten (JLS7: 6.5.2.BL1.B3.1 and .2). This caused
'EvaluatorTests.testWideInstructions()' to fail.
- JANINO-178: ConcurrentModificationException while compiling anonymous class
- JANINO-179: ClassCastException: ReflectionIClass
- JANINO-174: MethodDescriptors should be cached in IMethod.getDescriptor
- JANINO-172: qualified-name reclassifcations broken
- JANINO-181: Add OSGi info in manifest.
Version 2.7.5, Jul 13, 2014 - Download
- JANINO-173: [janino-user] Dynamically loading from source + AST walk & transforms
- JANINO-176: push latest version to maven central
- JANINO-156: Tagged releases should contain parent pom and correct versions
- Made JANINO available on MAVEN CENTRAL.
Version 2.7.4, Feb 3, 2014 - Download
- Simple implementation of type variables.
- JANINO-170: NullPointerExceptions on Google AppEngine
Version 2.7.3, Jan 19, 2014 - Download
- Implemented 'enhanced FOR statement on Iterable' (with type inference).
- Added parsing of type parameters.
Version 2.7.2, Jan 13, 2014 - Download
- JANINO-167: include Mod.is*() convenience methods
- Allow an 'ArrayType' as a 'TypeArgument'.
- Local variable declaration statement with parameterized type didn't work.
- Added the 'enhanced FOR statement' (except for Iterable, which doesn't make much sense without generics).
Version 2.7.1, Nov 13, 2013 - Download
- "Missing @Override" is no longer an error, just a warning
'ErrorHandler' and 'WarningHandler' moved from JANINO to COMMONS-COMPILER and can now be installed on
ICookable - useful for testing.
- JANINO-161: Operand stack underrun
- Added 'SimpleConstant'.
- JANINO-163: JANINO complains about "unreachable code"
- JANINO-164: Add VARARGS support
- Added tons of JAVADOC (thanks CheckStyle)
- Last CheckStyle clean-up corrections -- all clean now!!
- JANINO-165: Please expose Unparser's states to its subclasses
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.
- 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
ScanException were removed; all methods that previously threw
one or more of
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
Rather than instantiating e.g.
org.codehaus.janino.ExpressionEvaluator directly, applications can now
which will use the first implementation of
IExpressionEvaluator on the class path (be it
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
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
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.
java.util.Collections.EMPTY_MAP), types (e.g.
import static java.util.Map.Entry) and
import static java.util.Arrays.asList)
Added static-import-on-demand declarations for fields (e.g.
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
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
with minimal peepholes to the classes you specify. This also resolves issue JANINO-66: Security: restrict
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
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
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
ScriptEvaluator.evaluate() had to be renamed to
ScriptEvaluator.getClazz() due to a method signature clash with
- Improved the JAVADOC of the
*Evaluator and the
- 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).
Scanner now warns about misplaced DOC comments -- hence we need to have a
WarningHandler installed also on the
- 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.
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
- 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
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 runtime
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
Version 2.3.13, October 28, 2005 - Download
- Added the missing
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
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.)
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 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
This involved some minor incompatible changes:
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
Scanner.Location a top-level class.
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
Version 2.2.0, January 02, 2005 - Download
Version 2.1.0, December 09, 2004 - Download
- Switched from GNU "Lesser General Public License" (LGPL) to Apache License 2.0.
equals()code> methods to
Version 2.0.17, December 06, 2004 - Download
Version 2.0.16, November 19, 2004 - Download
Version 2.0.15, November 9, 2004 - Download
Version 2.0.14, November 1, 2004 - Download
Version 2.0.13, October 27, 2004 - Download
More refactoring of the "IClassLoader" hierarchy. Added some nifty
TransformingIterator, and the
Collection that reads its elements from a delegate
Iterator while it is being
iterated for the first time).
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
- Cache the return values of
- Eliminated a lot of compilation warnings.
Version 2.0.11, September 27, 2004 - Download
Version 2.0.10, September 14, 2004 - Download
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
and system property
net.janino.source_debugging.enable is "true". The source code file is written
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 22.214.171.124.BL2.
Version 2.0.8, August 29, 2004 - Download
- Fixed several bugs in the
- Decimal long literal tokens were misinterpreted as octal.
Version 2.0.7, August 25, 2004 - Download
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
Version 2.0.4, June 29, 2004 - Download
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
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
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
Version 1.0.18, January 24, 2004
- Fixed up resolution of class names (JLS 126.96.36.199).
Version 1.0.17, January 21, 2004
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
Version 1.0.14, January 12, 2004
Version 1.0.13, January 8, 2004
Version 1.0.12, January 7, 2004
Version 1.0.11, January 6, 2004
Version 1.0.10, January 4, 2004
Version 1.0.9, January 3, 2004
Version 1.0.8, January 2, 2004
Version 1.0.7, December 25, 2003
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
Version 1.0.3, November 12, 2003
Version 1.0.2, October 30, 2003
Version 1.0.1, October 23, 2003
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
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).
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
that is a
ByteArrayClassLoader. This is
necessary if the expressions, scripts and classes need to refer to each other. (Requested by Fabirce Carnet
A "for" statement with an empty condition (e.g. "for(;;)") caused a
net.janino.ClassLoaderIClassLoader.ReflectionIClass holds a map that guarantees that
one-to-one. This posed a memory leak. (Reported by Fabrice Carnet 2003-05-20.)
- Documented the
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
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
import-on-demand directive other than the last one caused a compilation error. (Reported by Audrius Meskauskas
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
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 lots of JAVADOC comments.
Version 0.1, October 30, 2001