$Id: RELEASE-NOTES.txt 928452 2010-03-28 16:51:48Z henrib $ Commons JEXL Package Version 2.0.1 Release Notes INTRODUCTION: ============= JEXL is an Expression Language supporting most of the constructs in the JSTL Expression Language, along with some additional extensions. http://commons.apache.org/jexl/ Changes in this version include: Incompatible Changes ==================== Now requires Java 1.5 or later. Version 2.0 resides in the org.apache.commons.jexl2 package; part of the version 1.x API is reimplemented as an add-on source library in the jexl-compat directory; since it can not fully reimplement the original public 1.x, it may only be used to ease transition in strictly controlled deployments. The following classes are implemented through the jexl-compat source library: * ExpressionFactory * ScriptFactory * Expression * Script * JexlContext * JexlHelper Migration notes =============== When migrating from jexl 1.x to jexl 2.0, the following hints may be helpfull. The following classes no longer exist: * ExpressionFactory, ScriptFactory: create a JexlEngine and use createExpression() or createScript() instead. The following classes have been renamed and replaced: * VelMethod <=> JexlMethod * VelPropertyGet <=> JexlPropertyGet * VelPropertySet <=> JexlPropertySet The following methods have been removed: * Info.getTemplateName() - use Info.getName() instead * Expression.addPostResolver() / Expression.addPreResolver() - set ant-like variables in JexlContext, implement a specific JexlContext or derive JexlcontextInterpreter/JexlEngine instead Behavior changes ================ * Public fields are considered when using JexlPropertyGet / JexlPropertySet: Jexl 1.x behavior can be reimplemented by subclassing UberspectImpl. *Division (/ operator) behavior change: division between integers no longer casts its operands to double; integer division allways results in a integer. The 1.x behavior can be reimplemented by subclassing JexlArithmetic. New Features: ============= Assignment expression: a = b (and a.b.c = d) * Assigns a variable (ant-like variable or bean-property) Ternary operator expression: a ? b : c (and a ?: c) * The usual inline conditional shortcut and its 'Elvis' form (a ?: b evaluates as a ? a : b) Constructor call expression: new('my.class.name', arguments...) * Creates a new instance of a class using the most appropriate constructor according to the actual arguments Function namespace: ns:func(arguments...) * A function namespace allows the use of class or instance methods in function calls UnifiedJEXL * Adds ${...} and #{...} JSP/EL syntax support on top of the JexlEngine JSR-223 support * Implement JSR-223 Scripting Engine for JEXL script (need BSF-3.0 on Java < 6) Error and exception handling * Configuring the leniency and verbosity of the Jexl engine allows user control over the error handling policy Bugs fixed in 2.0.1: ==================== * JEXL-100: Array access expressions fail when evaluated twice and cache is enabled * JEXL-99: Documentation of Thread Safety / Invalid code examples on homepage * JEXL-98: Quote escaping cannot be escaped Bugs fixed in 2.0: ================== * JEXL-90: Jexl parser allows invalid expressions, e.g. "a=1 b=2 3" * JEXL-88: MethodKey.java - name clash getMostSpecific() with Java 1.5.0 * JEXL-87: Inconsistent behaviour of arithmetical operations * JEXL-81: Introspector does not use ListGetExecutor for List * JEXL-80: Lenient mode should not throw exception when {g,s}etting an undefined property * JEXL-78: Ternary operator throws Exception when JexlEngine in strict mode * JEXL-76: Remove unnecessary class VisitorAdapter * JEXL-71: Parsing errors? * JEXL-67: Potential NPE in util.introspection.MethodKey * JEXL-66: testDottedNames expects map enumeration order * JEXL-64: Inconsistent behaviour of dotted names * JEXL-62: NPE in Interpreter * JEXL-59: ClassMap holds a reference to class * JEXL-56: Logging wrongly uses java.util.logging * JEXL-50: Div operator does not do integer division * JEXL-49: Block statements aren't parsed * JEXL-48: NPE during expression evaluation * JEXL-45: Unhandled division by zero * JEXL-42: NullPointerException evaluating an expression * JEXL-40: JEXL fails to find abstract public methods in the base class if overridden by non-public derived types * JEXL-32: BigDecimal values are treated as Long values which results in loss of precision * JEXL-30: ASTAddNode does not add BigDecimal objects correctly * JEXL-27: Cannot assign a value to the property of an object, such as object.prop = value. * JEXL-26: ASTArrayAccess messes up on fallback to JexlContext * JEXL-19: Ternary conditional not supported * JEXL-3 : Static method resolution and changes to context Other issues fixed (Improvements/New Features): =============================================== * JEXL-95: Enhance JSR-223 implementation * JEXL-94: Allow stateful namespaces (ns:function) * JEXL-93: Add public fields as targets of set/get property * JEXL-92: JexlContext API should be more flexible * JEXL-89: Drop main() and suite() methods from Test cases * JEXL-85: 2.0 grammar finishing touches & debugger update * JEXL-82: Change foreach syntax * JEXL-77: Rename last Velocity originated classes * JEXL-72: Remove deprecated classes and methods entirely * JEXL-70: Add main class to allow scripts etc to be tested * JEXL-63: JSR-223 support * JEXL-61: Usage of strong references on Method/Constructor & WeakHashMap usage * JEXL-60: Refactor o.a.c.jexl.util and o.a.c.jexl.util.introspection * JEXL-58: UnifiedJEXL * JEXL-57: Change pom.xml to make it Netbeans Maven2 plugin friendly * JEXL-55: JEXL 2.0 redux, attempting to restart the effort to release 2.0 * JEXL-54: Light performance enhancements * JEXL-47: Allow single-line comments with // * JEXL-43: Website overview does not mention method calls and new 2.0 features * JEXL-41: Allow nested ${} evaluation * JEXL-35: Final API requirements * JEXL-34: Remove pre and post resolution of variables via the JexlExprResolver classes. * JEXL-33: Remove unnecessary throws Exception from various classes * JEXL-29: Support non-object-level functions/methods, as size and empty function * JEXL-25: Call method with varargs * JEXL-24: Support Long for integer literal instead of Integers * JEXL-21: operator overloading / hooks on operator processing * JEXL-16: allowing quote escaping * JEXL-15: Needs definable functions * JEXL-11: Don't make null convertible into anything * JEXL-10: Make possible checking for unresolved variables Other Changes: ============== o Add @since 2.0 tags to code so we can track API additions via Javadoc