<?xml version="1.0" encoding="UTF-8"?>

<!--
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->

<document xmlns="http://maven.apache.org/changes/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
    <properties>
        <title>Apache Commons JEXL Release Notes</title>
        <author email="dev@commons.apache.org">Commons Developers</author>
    </properties>
    <body>
        <release version="3.6.2" date="2026-02-05"
                 description="This is a feature and maintenance release. Java 8 or later is required.">
            <!-- FIX -->
            <action dev="henrib" type="fix" issue="JEXL-455" due-to="Vincent Bussol">Tokenization error with multiline expressions.</action>
            <action dev="henrib" type="fix" issue="JEXL-454" due-to="Vincent Bussol">Switch NaN case not found.</action>
            <action dev="henrib" type="fix" issue="JEXL-453" due-to="Vincent Bussol">Finally clause is not evaluated.</action>
            <!-- ADD -->
            <!-- UPDATE -->
            <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 93 to 96.</action>
        </release>
        <release version="3.6.1" date="2025-12-09"
                 description="This is a feature and maintenance release. Java 8 or later is required.">
            <!-- FIX -->
            <action dev="henrib" type="fix" issue="JEXL-452" due-to="Gary Gregory">Debug setting in Engine shows class/method/line even when set to false.</action>
            <action dev="henrib" type="fix" issue="JEXL-451" due-to="Xu Pengcheng">Restore JexlSandbox permission capabilities on Object.class.</action>
            <action dev="henrib" type="fix" issue="JEXL-450">Disable instantiation of internal classes in RESTRICTED mode.</action>
            <action dev="henrib" type="fix" issue="JEXL-449" due-to="William Price">Inconsistency on nature of curly-bracket syntactic elements regarding annotations.</action>
            <!-- ADD -->
            <!-- UPDATE -->
            <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.commons:commons-parent from 91 to 93 #391, #396.</action>
            <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.20.0.</action>
        </release>
        <release version="3.6.0" date="2025-11-10"
                 description="This is a feature and maintenance release. Java 8 or later is required.">
            <!-- FIX -->
            <action dev="henrib" type="fix" issue="JEXL-448">
                Engines caching misses local variables handling and global eviction capability.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-447" due-to="William Price">
                Regression in script-defined functions.
            </action>
            <action dev="William Price" type="fix" issue="JEXL-446" due-to="William Price">
                ClassTool module inspection is too strict.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-442" due-to="Xu Pengcheng">
                Local variables are not resolved in interpolation string expression.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-441" due-to="Xu Pengcheng">
                Tokenization error if "\n" in template expression.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-439" due-to="Xu Pengcheng">
                When using reference capture, incorrect scoping when local variable redefines a captured symbol.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-437" due-to="William Price">
                Semicolons not actually optional between function calls on separate lines.
            </action>
            <action type="fix" dev="ggregory" due-to="Gary Gregory">
                org.apache.commons.jexl3.internal.introspection.AbstractExecutor.initMarker(Class, String, Class...) throws IllegalArgumentException instead of Exception.
            </action>
            <action type="fix" dev="ggregory" due-to="Gary Gregory">
                Reuse BigInteger constants instead of creating new instances in JexlArithmetic.toBigInteger(Object).
            </action>
            <!-- ADD -->
            <action dev="henrib" type="add" issue="JEXL-440">
                Switch statement &amp; expressions.
            </action>
          <!-- UPDATE -->
          <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.commons:commons-parent from 81 to 91 #344, #368, #372.</action>
          <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.19.0 #355.</action>
          <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump com.google.code.gson:gson from 2.13.1 to 2.13.2 #371.</action>
        </release>
        <release version="3.5.0" date="2025-04-11"
                 description="This is a feature and maintenance release. Java 8 or later is required.">
          <!-- FIX -->
            <action dev="henrib" type="fix" issue="JEXL-436" due-to="Vincent Bussol">
                The increment (decrement) operator does not check for null operand
            </action>
            <action dev="henrib" type="fix" issue="JEXL-435" due-to="Vincent Bussol">
                Changed behavior of empty operator overloading Action.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-434" due-to="Vincent Bussol">
                The safe-access array operator is not safe.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-433" due-to="Vincent Bussol">
                Debugger does not accept empty return statement.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-432" due-to="Vincent Bussol">
                Namespace functors are not cleared when the classloader is updated.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-431" due-to="Vincent Bussol">
                Parse error with variables declared in a catch clause.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-429" due-to="Shuo Geng">
                Ternary expression regression.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-425" due-to="Xu Pengcheng">
                Multiline format literals does not always return string.
            </action>
            <action type="fix" dev="ggregory" due-to="Gary Gregory">
              Replace NumberParser use of Locale.ENGLISH with Locale.ROOT.
            </action>
            <action type="fix" dev="ggregory" due-to="Gary Gregory">Pick up maven-antrun-plugin version from parent POM org.apache:apache.</action>
          <!-- ADD -->
            <action dev="henrib" type="add" issue="JEXL-438" due-to="Yair Lenga">
                Allow parser factory specification.
            </action>
            <action dev="henrib" type="add" issue="JEXL-428" due-to="Xu Pengcheng">
                Make Comparable object high priority while comparing.
            </action>
            <action dev="henrib" type="add" issue="JEXL-427" due-to="Xu Pengcheng">
                Avoid coercing logical expressions to boolean.
            </action>
            <action dev="henrib" type="add" issue="JEXL-426" due-to="Xu Pengcheng">
                Enable pass-by-reference for Captured Variables.
            </action>
            <action dev="ggregory" type="add" due-to="Gary Gregory">
                Add and use CoercionException.CoercionException(String, Throwable).
            </action>
          <!-- UPDATE -->
          <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 71 to 79 #279, #282, #287, #291, #295, #301.</action>
          <action type="update" dev="ggregory">Bump commons-logging:commons-logging from 1.3.2 to 1.3.5 #267, #280, #325.</action>
          <action type="update" dev="ggregory">Bump org.codehaus.mojo:animal-sniffer-maven-plugin from 1.23 to 1.24 #266.</action>
          <action type="update" dev="ggregory">Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.17.0 #270, #274, #283.</action>
          <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.ow2.asm:asm from 9.7 to 9.7.1 #294.</action>
          <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump com.google.code.gson:gson from 2.11.0 to 2.13.0 #321.</action>
        </release>
        <release version="3.4.0" date="2024-06-02" description="Java 8 is required.">
            <!-- ADD -->
            <action dev="henrib" type="add" issue="JEXL-423">
                Add support for instanceof / !instanceof
            </action>
            <action dev="henrib" type="add" issue="JEXL-422">
                Add strict equality (===) and inequality (!==) operators
            </action>
            <action dev="henrib" type="add" issue="JEXL-421">
                ArrayBuilder: array type should reflect common class of its entries
            </action>
            <action dev="henrib" type="add" issue="JEXL-419">
                Add permission syntax to allow class/method/field
            </action>
            <action dev="henrib" type="add" issue="JEXL-418" due-to="Xu Pengcheng">
                Add try-catch support
            </action>
            <action dev="henrib" type="add" issue="JEXL-408" due-to="sebb">
                Using JexlFeatures is tedious
            </action>
            <action dev="henrib" type="add" issue="JEXL-404" due-to="Xu Pengcheng">
                Support array-access safe navigation (x?[y])
            </action>
            <action dev="henrib" type="add" issue="JEXL-401">
                Captured variables should be read-only
            </action>
            <action dev="henrib" type="add" issue="JEXL-398" due-to="Xu Pengcheng">
                Allow 'trailing commas' or ellipsis while defining array, map and set literals
            </action>
            <action type="add" dev="ggregory" due-to="Gary Gregory">
                Add Maven property project.build.outputTimestamp for build reproducibility.
            </action>
            <!-- FIX -->
            <action dev="henrib" type="fix" issue="JEXL-420" due-to="Xu Pengcheng">
                Error while comparing float and string value
            </action>
            <action dev="henrib" type="fix" issue="JEXL-417" due-to="Robert Lucas" >
                JexlArithmetic looses precision during arithmetic operator execution
            </action>
            <action dev="henrib" type="fix" issue="JEXL-416" due-to="William Price" >
                Null-valued pragma throws NPE in 3.3
            </action>
            <action dev="henrib" type="fix" issue="JEXL-415" due-to="Xu Pengcheng" >
                Incorrect template eval result.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-414" due-to="Holger Sunke" >
                SoftCache may suffer from race conditions.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-412" due-to="Xu Pengcheng" >
                Ambiguous syntax between namespace function call and map object definition.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-410" due-to="sebb">
                JexlFeatures: ctor does not enable all features.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-409" due-to="sebb">
                Disable LEXICAL should disable LEXICAL_SHADE.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-405">
                Recursive functions corrupt evaluation frame if reassigned.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-403" due-to="Xu Pengcheng" >
                Exception while evaluating template literal used in array assignment in loop.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-402" due-to="Xu Pengcheng">
                Parse failed with empty return value.
            </action>
            <action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">
                [StepSecurity] ci: Harden GitHub Actions #180.
            </action>
            <action dev="ggregory" type="fix" due-to="PMD, Gary Gregory">
                Guard logging calls.
            </action>
            <action dev="ggregory" type="fix" due-to="PMD, Gary Gregory">
                Deprecate SimpleNode.SimpleNode(Parser, int) in favor of SimpleNode.SimpleNode(int).
            </action>
            <action dev="ggregory" type="fix" due-to="PMD, Gary Gregory">
                Deprecate JexlNode.JexlNode(Parser, int) in favor of JexlNode.JexlNode(int).
            </action>
            <!-- UPDATE -->
            <action dev="henrib" type="update" due-to="dependabot">
                Bump commons-parent from 67 to 69.
            </action>
            <action dev="henrib" type="update" due-to="dependabot">
                Bump github actions.
            </action>
            <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
                Bump commons-parent from 57 to 70.
            </action>
            <action dev="ggregory" type="update" due-to="dependabot">
                Bump org.ow2.asm:asm from 9.5 to 9.7 #200, #242.
            </action>
            <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump commons-logging from 1.2 to 1.3.2 #241, #255.</action>
            <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump com.google.code.gson:gson from 2.10.1 to 2.11.0 #258.</action>
        </release>
        <release version="3.3" date="2023-03-20">
            <!-- ADD -->
            <action dev="henrib" type="add" issue="JEXL-392">
                Enable namespace declaration based on scripts
            </action>
            <action dev="henrib" type="add" issue="JEXL-391">
                Improve in/=~ operator when arguments are arrays and collections
            </action>
            <action dev="henrib" type="add" issue="JEXL-390" due-to="Dmitri Blinov">
                Pragmas should not be statements
            </action>
            <action dev="henrib" type="add" issue="JEXL-389" due-to="Dmitri Blinov">
                Improve parsing timings
            </action>
            <action dev="Dmitri Blinov" type="add" issue="JEXL-385" due-to="Dmitri Blinov">
                Support disabling fortran-style relational operators syntax
            </action>
            <action dev="Dmitri Blinov" type="add" issue="JEXL-382" due-to="Dmitri Blinov">
                Simplify grammar and lexical state management
            </action>
            <action dev="henrib" type="add" issue="JEXL-380">
                Multiple values per pragma key
            </action>
            <action dev="henrib" type="add" issue="JEXL-379">
                Allow new to use class identifier
            </action>
            <action dev="henrib" type="add" issue="JEXL-373" due-to="Dmitri Blinov">
                Add support for prefix/postfix increment/decrement operators
            </action>
            <action dev="henrib" type="add" issue="JEXL-372" due-to="Dmitri Blinov">
                Add support for 'standard' for loop
            </action>
            <action dev="henrib" type="add" issue="JEXL-369" due-to="Dmitri Blinov">
            Add 'let' and 'const' variable declarations
            </action>
            <action dev="henrib" type="add" issue="JEXL-367" due-to="Hussachai Puripunpinyo">
                Named function and fat-arrow (=>) lambda syntax
            </action>
            <action dev="henrib" type="add" issue="JEXL-366" due-to="Hussachai Puripunpinyo">
            Fail to evaluate string and number comparison
            </action>
            <action dev="henrib" type="add" issue="JEXL-365" due-to="Dmitri Blinov">
                Lambda expressions
            </action>
            <action dev="henrib" type="add" issue="JEXL-363">
                Allow retrieving captured variables in script
            </action>
            <action dev="henrib" type="add" issue="JEXL-360"  due-to="Ian Hawkins">
                Add missing bitshift operators (&lt;&lt;, &gt;&gt;&gt;, &gt;&gt;)
            </action>
            <action dev="henrib" type="add" issue="JEXL-359">
                Allow per-operator arithmetic handling of null arguments
            </action>
            <action dev="henrib" type="add" issue="JEXL-357">
                Configure accessible packages/classes/methods/fields
            </action>
            <!--  FIX -->
            <action dev="henrib" type="fix" issue="JEXL-386" due-to="Song Fuchang">
                Non-inheritable permissions on interfaces are ignored in an inheritable sandbox
            </action>
            <action dev="henrib" type="add" issue="JEXL-384" due-to="Hussachai Puripunpinyo">
                Improve control over JexlArithmetic null argument handling
            </action>
            <action dev="henrib" type="fix" issue="JEXL-378" due-to="Hussachai Puripunpinyo">
                Incremental operator and decremental operator do not honor the side-effect flag
            </action>
            <action dev="henrib" type="fix" issue="JEXL-376">
                Introspector captures methods on non-exported classes (modules, java9+)
            </action>
            <action dev="henrib" type="fix" issue="JEXL-375" due-to="Jan Klicka">
                Cannot access enums by their name when using sandbox
            </action>
            <action dev="henrib" type="fix" issue="JEXL-374" due-to="Alex Hutton">
                No exception if dereferencing null object using safe(false) and antish(false)
            </action>
            <action dev="henrib" type="fix" issue="JEXL-371">
                Override of a protected method with public visibility is not callable
            </action>
            <action dev="henrib" type="fix" issue="JEXL-370" due-to="Alex Hutton">
                Cannot check if variable is defined using ObjectContext if the value is null
            </action>
            <action dev="henrib" type="add" issue="JEXL-368">
                Namespace functor resolution is not cached
            </action>
            <action dev="henrib" type="fix" issue="JEXL-364">
                Evaluator options not propagated in closures
            </action>
            <action dev="henrib" type="fix" issue="JEXL-362">
                JexlInfo position reporting is off
            </action>
            <action dev="henrib" type="fix" issue="JEXL-361">
                Null may be used as operand silently even in arithmetic strict(true) mode
            </action>
            <action dev="henrib" type="fix" issue="JEXL-358">
                JexlScript.curry(...) resulting scripts don't evaluate correctly
            </action>
            <action dev="henrib" type="fix" issue="JEXL-354"  due-to="William Price">
                #pragma does not handle negative integer or real literals
            </action>
            <action dev="henrib" type="fix" issue="JEXL-353" due-to="Mr.Z">
                Documentation error for not-in/not-match operator
            </action>
            <!-- UPDATE -->
            <action dev="ggregory" type="update" due-to="Gary Gregory">
                Bump actions/cache from 3 to 3.0.8.
            </action>
            <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
                Bump actions/checkout from 2 to 3.0.2 #79.
            </action>
            <action dev="ggregory" type="update" due-to="Gary Gregory">
                Bump actions/setup-java from 2 to 3.5.1.
            </action>
            <action dev="ggregory" type="update" due-to="Dependabot">
                Bump checkstyle from 9.2 to 9.2.1 #72.
            </action>
            <action dev="ggregory" type="update" due-to="Dependabot">
                Bump spotbugs-maven-plugin from 4.4.1 to 4.5.3.0 #73.
            </action>
            <action dev="ggregory" type="update" due-to="Dependabot">
                Bump maven-pmd-plugin from 3.15.0 to 3.16.0 #82.
            </action>
            <action dev="ggregory" type="update" due-to="Gary Gregory">
                Bump pmd from 6.48.0 to 6.52.0.
            </action>
            <action dev="ggregory" type="update" due-to="Dependabot">
                Bump commons-parent from 53 to 57 #121, #148, #155, #176.
            </action>
            <action dev="ggregory" type="update" due-to="Gary Gregory">
                Bump junit from 4.13.2 to 5.9.1 Vintage.
            </action>
        </release>
        <release version="3.2.1" date="2021-06-25">
            <action dev="henrib" type="fix" issue="JEXL-352" due-to="Øyvind Horneland">
                Possible memory leak regarding parser jjtree nodes in JEXL 3.2
            </action>
            <action dev="henrib" type="fix" issue="JEXL-351" due-to="Francesco Chicchiricco">
                JXLT Template fails when using sandboxing
            </action>
            <action dev="henrib" type="fix" issue="JEXL-350" due-to="David Costanzo">
                map[null] throws "unsolvable property" when a Sandbox is used
            </action>
        </release>
        <release version="3.2" date="2021-06-07">
            <action dev="henrib" type="fix" issue="JEXL-349" due-to="Cameron Samak">
                Script valid in 3.0 no longer valid
            </action>
            <action dev="henrib" type="fix" issue="JEXL-348" due-to="Cameron Samak">
                Parsing error when mixing namespaces with conditional expressions
            </action>
            <action dev="csamak" type="update" due-to="Cameron Samak">
                Update to ph-javacc-maven-plugin 4.1.4.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-347" due-to="Cameron Samak">
                Missing unsolvable property exception for reference when used with equals
            </action>
            <action dev="henrib" type="fix" issue="JEXL-346" due-to="David Costanzo">
                namespace function syntax leads to strange error for "common case" of ternary operator
            </action>
            <action dev="ggregory" type="update" due-to="Gary Gregory">
                Bump actions/setup-java from v1.4.3 to v2 #160.
            </action>
            <action dev="henrib" type="add" issue="JEXL-344"  due-to="David Costanzo">
                Don't fill stack trace for JexlExpression#Return (to improve performance)
            </action>
            <action dev="henrib" type="add" issue="JEXL-341"  due-to="Garret Wilson">
                Errors needs to provide more information on caught exceptions.
            </action>
            <action dev="henrib" type="add" issue="JEXL-340"  due-to="Garret Wilson">
                JexlException message access is incomplete and reversed
            </action>
            <action dev="Hussachai Puripunpinyo" type="fix" issue="JEXL-336">
                Escape some control characters
            </action>
            <action dev="henrib" type="update" issue="JEXL-335">
                Update JUnit to 4.13.1
            </action>
            <action dev="henrib" type="add" issue="JEXL-334">
                Remove offensive terminology from code and API
            </action>
            <action dev="henrib" type="add" issue="JEXL-333">
                Allow declaration of namespace within script
            </action>
            <action dev="henrib" type="fix" issue="JEXL-331" due-to="David Costanzo">
                Please document \uXXXX escape sequence
            </action>
            <action dev="henrib" type="fix" issue="JEXL-330" due-to="David Costanzo">
                JexlException.Parsing.getMessage() throws exception when parse error is in long expression
            </action>
            <action dev="henrib" type="fix" issue="JEXL-328">
                JXLT template scripts evaluation do not process pragmas
            </action>
            <action dev="henrib" type="fix" issue="JEXL-327" due-to="David Costanzo">
                map[null] does not work in assignment context
            </action>
            <action dev="henrib" type="fix" issue="JEXL-326" due-to="David Costanzo">
                Link to "JavaCC" on syntax reference page is broken
            </action>
            <action dev="Dmitri Blinov" type="fix" issue="JEXL-325" due-to="Dmitri Blinov">
                Potential race-condition in NumberParser.toString()
            </action>
            <action dev="henrib" type="fix" issue="JEXL-324" due-to="David Costanzo">
                JexlEngine.createExpression("new()").getParsedText() throws NPE
            </action>
            <action dev="henrib" type="fix" issue="JEXL-323" due-to="David Costanzo">
                Ant-style variables can throw exception when evaluated for their value
            </action>
            <action dev="henrib" type="fix" issue="JEXL-322" due-to="Constantin Hirsch">
                JXLT String literals cannot contain curly braces
            </action>
            <action dev="henrib" type="fix" issue="JEXL-321" due-to="Dmitri Blinov">
                Empty do-while loop is broken
            </action>
            <action dev="henrib" type="fix" issue="JEXL-320" due-to="David Costanzo">
                "mvn test" fails with COMPILATION ERROR in SynchronizedArithmetic.java on Java 11
            </action>
            <action dev="henrib" type="fix" issue="JEXL-319" due-to="David Costanzo">
                Apache project documentation gives instructions in subversion
            </action>
            <action dev="henrib" type="fix" issue="JEXL-318" due-to="Dmitri Blinov">
                Annotation processing may fail in lexical mode
            </action>
            <action dev="henrib" type="add" issue="JEXL-317">
                Support script cancellation through less invasive API
            </action>
            <action dev="henrib" type="fix" issue="JEXL-315" due-to="Mike Bartlett">
               JxltEngine literal string strings ending in \ $ or # throw JxltEngine$Exception
            </action>
            <action dev="henrib" type="fix" issue="JEXL-314" due-to="Osy">
               Comparison NULL values of variables NAME1.NAME2
            </action>
            <action dev="henrib" type="fix" issue="JEXL-312">
                @NoJexl fails to disallow method call
            </action>
            <action dev="henrib" type="fix" issue="JEXL-311">
                Jxlt template scripts fail using verbatim expressions embedded in lambdas
            </action>
            <action dev="henrib" type="fix" issue="JEXL-309">
                Line numbers are not correct when template report errors
            </action>
            <action dev="henrib" type="fix" issue="JEXL-307" due-to="Dmitri Blinov">
                Variable redeclaration option
            </action>
            <action dev="henrib" type="fix" issue="JEXL-306" due-to="Dmitri Blinov">
                Ternary operator ? protects also its branches from resolution errors
            </action>
            <action dev="henrib" type="fix" issue="JEXL-305" due-to="Dmitri Blinov">
                Script debugger produces incorrect syntax
            </action>
            <action dev="henrib" type="fix" issue="JEXL-304" due-to="Marcus Warm">
                Error parsing overview.limit.var
            </action>
            <action dev="henrib" type="fix" issue="JEXL-303" due-to="Dmitri Blinov">
                Block syntax is broken
            </action>
            <action dev="henrib" type="fix" issue="JEXL-302" due-to="Dmitri Blinov">
                JexlScript.getVariables returns strange values for array access
            </action>
            <action dev="henrib" type="fix" issue="JEXL-301" due-to="Dmitri Blinov">
                Array access operator does not fail on null object in non-strict arithmetic mode
            </action>
            <action dev="henrib" type="fix" issue="JEXL-299" due-to="Jarek Cecho">
                Improve message error when method could not be found
            </action>
            <action dev="henrib" type="fix" issue="JEXL-298" due-to="Dmitri Blinov">
                Unable to call 'empty' and 'size' member methods with parameters
            </action>
            <action dev="henrib" type="fix" issue="JEXL-296" due-to="Dmitri Blinov">
                Real literal in scientific format is not parsed without suffix
            </action>
            <action dev="henrib" type="add" issue="JEXL-295">
                Add unary plus operator
            </action>
            <action dev="henrib" type="add" issue="JEXL-292" due-to="Dmitri Blinov">
                Allow specifying custom Permissions class for Uberspect to be used later by Introspector
            </action>
            <action dev="henrib" type="fix" issue="JEXL-291" due-to="David Costanzo">
                Using sandbox prevents array-syntax lookup by number in Map
            </action>
            <action dev="henrib" type="fix" issue="JEXL-290">
                Safe navigation fails on chained method calls
            </action>
            <action dev="henrib" type="fix" issue="JEXL-289" due-to="Dmitri Blinov">
                Passing undeclared function parameter can overwrite a local function variable
            </action>
            <action dev="henrib" type="add" issue="JEXL-288" due-to="Dmitri Blinov">
                Annotation can not be specified for a standalone statement
            </action>
            <action dev="henrib" type="fix" issue="JEXL-287" due-to="Dmitri Blinov">
                Wrong resolution of local variables
            </action>
            <action dev="henrib" type="fix" issue="JEXL-286" due-to="Dmitri Blinov">
                For statement without a body should update its variable
            </action>
            <action dev="henrib" type="fix" issue="JEXL-285">
                For statement variable may seem unaffected by iteration
            </action>
            <action dev="henrib" type="fix" issue="JEXL-282" due-to="Dmitri Blinov">
                Pragmas with antish names are broken
            </action>
            <action dev="henrib" type="fix" issue="JEXL-281" due-to="Mirek Hankus">
                MethodExecutor incorrectly tests for empty parameters list
            </action>
            <action dev="henrib" type="fix" issue="JEXL-280" due-to="Dmitri Blinov">
                break/continue statements outside of the loop
            </action>
            <action dev="henrib" type="fix" issue="JEXL-279">
                Null variables property access do not throw exceptions
            </action>
            <action dev="henrib" type="fix" issue="JEXL-278">
                Ambiguous exceptions should point to actual statement ambiguity
            </action>
            <action dev="henrib" type="add" issue="JEXL-275">
                 Allow safe navigation as option
            </action>
            <action dev="henrib" type="add" issue="JEXL-274">
                Handle soft and hard stack overflow
            </action>
            <action dev="Dmitri Blinov" type="add" issue="JEXL-175" due-to="Dmitri Blinov">
                 Add do...while(...) loops
            </action>
            <action dev="henrib" type="fix" issue="JEXL-272">
                Dereferencing null property not reported on method call
            </action>
            <action dev="henrib" type="fix" issue="JEXL-271" due-to="Dmitri Blinov">
                Hoisted variable is lost when currying lambda
            </action>
            <action dev="henrib" type="fix" issue="JEXL-270" due-to="Dmitri Blinov">
            Wrong Script$Curried creation when script.curry() method is called inside script
            </action>
            <action dev="henrib" type="add" issue="JEXL-264">
                Allow space, quote and double-quote in identifiers
            </action>
            <action dev="henrib" type="add" issue="JEXL-261">
                JexlEngine.setClassLoader(...) should reload namespaces that are classes
            </action>
            <action dev="henrib" type="add" issue="JEXL-260" due-to="Dmitri Blinov">
                Automatically inject JexlContext in constructor call when possible
            </action>
            <action dev="henrib" type="fix" issue="JEXL-257" due-to="Dmitri Blinov">
                Function throwing IllegalArgumentException may be called twice
            </action>
            <action dev="henrib" type="add" issue="JEXL-253" due-to="Woonsan Ko">
                Permissions by super type in JexlSandbox
            </action>
            <action dev="henrib" type="add" issue="JEXL-252" due-to="Dmitri Blinov">
                Allow for interpolated strings to be used in property access operators
            </action>
            <action dev="henrib" type="add" issue="JEXL-250" due-to="Dmitri Blinov">
                Safe navigation operator
            </action>
            <action dev="henrib" type="add" issue="JEXL-249" due-to="Dmitri Blinov">
                Java 1.8 as minimum supported version
            </action>
            <action dev="henrib" type="add" issue="JEXL-248" due-to="Dmitri Blinov">
                Allow range subexpression as an array property assignment identifier
            </action>
            <action dev="henrib" type="fix" issue="JEXL-246" due-to="Dmitri Blinov">
                Intermittent ambiguous method invocation when processing assignOverload
            </action>
            <action dev="henrib" type="fix" issue="JEXL-245" due-to="Ate Douma">
                Engine in strict mode fails to fail on unsolvable variables or properties
            </action>
            <action dev="henrib" type="fix" issue="JEXL-244" due-to="Dmitri Blinov">
                Webapp classloader memory leaks
            </action>
            <action dev="henrib" type="add" issue="JEXL-243">
                Allow restricting available features in Script/Expressions
            </action>
            <action dev="henrib" type="fix" issue="JEXL-241" due-to="Yang Wang">
                NPE when script containing string interpolation executed in multiple threads
            </action>
            <action dev="henrib" type="add" issue="JEXL-240" due-to="Dmitri Blinov">
                 Unable to invoke a call operator using antish style variable resoltion
            </action>
            <action dev="henrib" type="add" issue="JEXL-238" due-to="Cameron Samak">
                Restrict getLiteralClass to a Number for NumberLiterals
            </action>
            <action dev="henrib" type="add" issue="JEXL-237" due-to="Dmitri Blinov">
                Ability to restrict usage of certain names when declaring local variables
            </action>
            <action dev="henrib" type="add" issue="JEXL-236" due-to="Dmitri Blinov">
                Support CharSequence in size(), empty() and contains() operators
            </action>
            <action dev="henrib" type="add" issue="JEXL-234" due-to="Dmitri Blinov">
                Extend application of operators startsWith and endsWith from String to CharSequence types
            </action>
            <action dev="henrib" type="fix" issue="JEXL-231" due-to="Dmitri Blinov">
                Syntax for accessing List elements is not mentioned in docs
            </action>
            <action dev="henrib" type="fix" issue="JEXL-230" due-to="Dmitri Blinov">
                List literal is not mentioned in docs
            </action>
            <action dev="henrib" type="fix" issue="JEXL-227" due-to="Dmitri Blinov">
                JexlScriptEngineFactory.getEngineVersion() should return actual version
            </action>
            <action dev="henrib" type="add" issue="JEXL-226" due-to="Min Wei">
                add ?? operator support
            </action>
            <action dev="henrib" type="fix" issue="JEXL-225" due-to="Vyacheslav Shago">
                Incorrect invoking methods with ObjectContext
            </action>
            <action dev="henrib" type="add" issue="JEXL-224" due-to="Dmitri Blinov">
                The ability to overload call() operator in customized JexlArithmetic implementation
            </action>
            <action dev="henrib" type="add" issue="JEXL-212" due-to="Dmitri Blinov">
                Restrict usage of assignment statements in JexlExpression
            </action>
            <action dev="Dmitri Blinov" type="add" issue="JEXL-175" due-to="Dmitri Blinov">
                 java.util.regex.Pattern creation operator (regex literals)
            </action>
        </release>
        <release version="3.1" date="2017-04-14">
            <action dev="henrib" type="add" issue="JEXL-222" due-to="Dmitri Blinov">
                The ability to declare indexed property getter/setter in customized JexlArithmetic implementation
            </action>
            <action dev="henrib" type="fix" issue="JEXL-221" due-to="Dmitri Blinov">
                Sporadic undefined property error caused by NPE at MapGetExecutor.tryInvoke()
            </action>
            <action dev="henrib" type="add" issue="JEXL-219">
                Blacklist by default in sandbox
            </action>
            <action dev="henrib" type="fix" issue="JEXL-217" due-to="Dmitri Blinov">
                Interpreter.getAttribute() raises exception in non-strict mode when cached property resolver is used
            </action>
            <action dev="henrib" type="add" issue="JEXL-216" due-to="Dmitri Blinov">
                Improve parsing concurrency in multithreaded environment
            </action>
            <action dev="henrib" type="add" issue="JEXL-215" due-to="Dmitri Blinov">
            JexlEngine.createInfo() is redundantly called when debug and caching is enabled leading to sub-optimal performance
            </action>
            <action dev="henrib" type="fix" issue="JEXL-214" due-to="Dmitri Blinov">
                Redundant call of fillInStackTrace() in JexlEngine.createInfo() ?
            </action>
            <action dev="henrib" type="fix" issue="JEXL-213" due-to="Dmitri Blinov">
                rename JexlBuilder.loader(Charset arg) to JexlBuilder.charset(Charset arg)
            </action>
            <action dev="henrib" type="add" issue="JEXL-211" due-to="Dmitri Blinov">
                Add callable method to JexlExpression interface
            </action>
            <action dev="henrib" type="fix" issue="JEXL-210" due-to="Dmitri Blinov">
                The way to cancel script execution with an error
            </action>
            <action dev="henrib" type="fix" issue="JEXL-209" due-to="Dmitri Blinov">
               Unsolvable function/method '&lt;?&gt;.&lt;null&gt;(...)'
            </action>
            <action dev="henrib" type="fix" issue="JEXL-208" due-to="Joe Tom">
                Documentation typos/inconsistencies
            </action>
            <action dev="henrib" type="fix" issue="JEXL-207" due-to="Dmitri Blinov">
               Inconsistent error handling
            </action>
            <action dev="henrib" type="fix" issue="JEXL-206" due-to="Dmitri Blinov">
                testCallableCancel() test hangs sporadically
            </action>
            <action dev="henrib" type="fix" issue="JEXL-205" due-to="Dmitri Blinov">
                testCancelForever() is not terminated properly
            </action>
            <action dev="henrib" type="fix" issue="JEXL-204" due-to="Dmitri Blinov">
                Script is not interrupted by a method call throwing Exception
            </action>
            <action dev="henrib" type="fix" issue="JEXL-203" due-to="Dmitri Blinov">
            JexlArithmetic.options() diverts Interpreter to use default implementation of JexlArithmetic instead of custom one
            </action>
            <action dev="henrib" type="fix" issue="JEXL-202" due-to="Dmitri Blinov">
                Detect invalid assignment operator usage with non-assignable l-value during script parsing
            </action>
            <action dev="henrib" type="add" issue="JEXL-201" due-to="Dmitri Blinov">
                Allow Interpreter to use live values from JexlEngine.Option interface implemented by JexlContext
            </action>
            <action dev="henrib" type="fix" issue="JEXL-198" due-to="Terefang Verigorn">
                JxltEngine Template does not expose pragmas
            </action>
            <action dev="henrib" type="add" issue="JEXL-197" due-to="Dmitri Blinov">
                Add annotations
            </action>
            <action dev="henrib" type="fix" issue="JEXL-196" due-to="Dmitri Blinov">
                Script execution hangs while calling method with one argument without parameter
            </action>
            <action dev="henrib" type="fix" issue="JEXL-195" due-to="Dmitri Blinov">
                Support for AtomicBoolean in logical expressions
            </action>
            <action dev="henrib" type="add" issue="JEXL-194" due-to="Dmitri Blinov">
                allow synchronization on iterableValue in foreach statement
            </action>
            <action dev="henrib" type="fix" issue="JEXL-193" due-to="Dmitri Blinov">
                InterruptedException is swallowed in function call in silent and non-strict mode
            </action>
            <action dev="henrib" type="fix" issue="JEXL-192" due-to="Constantin Mitocaru">
                Invalid return type when expected result is null
            </action>
            <action dev="henrib" type="fix" issue="JEXL-191" due-to="Constantin Mitocaru">
                Jexl3 unsolvable property exception when using enum
            </action>
            <action dev="henrib" type="fix" issue="JEXL-190" due-to="Dmitri Blinov">
                local function within context is not resolved if function resolver class without namespace is specified
            </action>
            <action dev="henrib" type="fix" issue="JEXL-189" due-to="Dmitri Blinov">
                Possible bug in Interpreter.isCancelled()
            </action>
            <action dev="henrib" type="fix" issue="JEXL-188" due-to="Dmitri Blinov">
                Possible bug in JexlArithmetic.isFloatingPointNumber()
            </action>
            <action dev="henrib" type="fix" issue="JEXL-187" due-to="Dmitri Blinov">
                Jexl Syntax doc does not mention 'continue' and 'break' operators
            </action>
            <action dev="henrib" type="fix" issue="JEXL-186" due-to="Philippe Mouawad">
                Performance regression in arithmetic operations compared to JEXL 2.1
            </action>
        </release>
        <release version="3.0" date="2015-12-27">
            <action dev="henrib" type="fix" issue="JEXL-184">
                dot-ed identifiers parsing failure
            </action>
            <action dev="henrib" type="fix" issue="JEXL-180" due-to="Kimball Robinson">
                Documentation - suggests using float for financials
            </action>
            <action dev="henrib" type="add">
                Added a 'curry' method to script returning script with bound arguments
            </action>
            <action dev="henrib" type="add" issue="JEXL-178 " due-to="Dmitri Blinov">
                'Unsolvable property' message to provide details about underlying exception
            </action>
            <action dev="henrib" type="add" issue="JEXL-177" due-to="Dmitri Blinov">
                Unified expressions to be used in String literals in JEXL scripts
            </action>
            <action dev="henrib" type="add" issue="JEXL-176" due-to="Dmitri Blinov">
                Synonym operator name 'in' for operator =~ // Remove 'foreach...in' syntax
            </action>
            <action dev="henrib" type="add" issue="JEXL-174" due-to="Dmitri Blinov">
                Overloadable property access operators
            </action>
            <action dev="henrib" type="add" issue="JEXL-173" due-to="Dmitri Blinov">
                Duck-typed java closures
            </action>
            <action dev="henrib" type="fix" issue="JEXL-171" due-to="Dmitri Blinov">
                Map access operator does not work if key name clashes with map property name
            </action>
            <action dev="henrib" type="add" issue="JEXL-170">
                Implement assignment operators
            </action>
            <action dev="henrib" type="fix" issue="JEXL-169" due-to="Robert Neßelrath">
                A string is wrongly identified as FloatingPointNumber
            </action>
            <action dev="henrib" type="fix" issue="JEXL-168" due-to="Dmitri Blinov">
                Dedicated operator for String concatenation
            </action>
            <action dev="henrib" type="fix" issue="JEXL-79" due-to="sebb">
                Add support for growable arrays (ArrayLists)
            </action>
            <action dev="henrib" type="fix" issue="JEXL-167" due-to="Dmitri Blinov">
                Possible loss of value when converting BigDecimal to BigInteger
            </action>
            <action dev="henrib" type="fix" issue="JEXL-166" due-to="Dmitri Blinov">
                Incorrect operator symbol for bitwise complement in jexlArithmetic
            </action>
            <action dev="henrib" type="add" issue="JEXL-164" due-to="Dmitri Blinov">
                public getters for high/low properties for IntegerRange and LongRange
            </action>
            <action dev="henrib" type="fix" issue="JEXL-163" due-to="Dmitri Blinov">
                empty(new ("java.lang.Long", 4294967296)) returns true
            </action>
            <action dev="henrib" type="fix" issue="JEXL-162" due-to="Dmitri Blinov">
                empty() function throws an exception : unsupported type
            </action>
            <action dev="henrib" type="fix" issue="JEXL-160" due-to="Dmitri Blinov">
                typo in package.html
            </action>
            <action dev="henrib" type="fix" issue="JEXL-158" due-to="Lars Cebulla">
                Handle locale decimal separators correctly
            </action>
            <action dev="henrib" type="fix" issue="JEXL-157" due-to="Lars Cebulla">
                Replace File.pathSeparator with File.separator
            </action>
            <action dev="henrib" type="add" >
                Added a method to get parameters from a template
            </action>
            <action dev="henrib" type="fix" >
                Identifiers beginning with 0s (like 00200) shoud not be considered integers
            </action>
            <action dev="henrib" type="add" issue="JEXL-152" due-to="Dmitri Blinov">
                Extend Range literal to support Long values
            </action>
            <action dev="henrib" type="add" issue="JEXL-149" due-to="Dmitri Blinov">
                Set Construction as per EL 3.0 spec
            </action>
            <action dev="henrib" type="add" >
                Added #pragma instruction, allowing scripts to communicate information to the underlying execution
                context.
            </action>
            <action dev="henrib" type="fix" >
                Hoisted variables in a lambda are seen as local variables; should be seen as global
            </action>
            <action dev="henrib" type="fix" >
                Local variables must preclude antish variables handling
            </action>
            <action dev="henrib" type="fix" >
                Depending on unkown conditions, overriden varargs method may return false to isVarArgs;
                fix by checking method in declaring class hierarchy.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-146" due-to="David Maplesden">
                Performance problem in Interpreter.unknownVariable mechanism
            </action>
            <action dev="henrib" type="fix">
                Functions assigned to local variables can not perform recursive calls
            </action>
            <action dev="henrib" type="fix">
                Improved error reporting on undefined or null variables
            </action>
            <action dev="henrib" type="fix">
                Improved operator overloading logic in JexlArithmeric (caching)
            </action>
            <action dev="henrib" type="fix" issue="JEXL-145" due-to="Ian Connor">
                Sandbox calling wrong check (classname vs class)
            </action>
            <action dev="henrib" type="fix" >
                JXLT fails to parse expressions that use map constants
            </action>
            <action dev="henrib" type="add" >
                Added break/continue in JEXL syntax
            </action>
            <action dev="henrib" type="add" >
                Added convenience methods to pass/use JexlInfo and arguments in templates
            </action>
            <action dev="henrib" type="add" >
                Added ability to overload some operators in JexlArithmetic (through introspection, based on method names)
            </action>
            <action dev="henrib" type="fix" >
                Fixed issue in edge case method resolution wrt overload and varargs
            </action>
            <action dev="henrib" type="add" >
                Switch logging to log4j 1.2
            </action>
            <action dev="henrib" type="fix" issue="JEXL-144" due-to="Woonsang Ko">
                Empty array property setting fails
            </action>
            <action dev="henrib" type="fix" issue="JEXL-142" due-to="Juozas Baliuks">
                Map expression issue with empty key
            </action>
            <action dev="henrib" type="fix" issue="JEXL-141" due-to="Harpreet Singh">
                Suffix for Big Decimal and Big Integer Literal is incorrectly mentioned in Java docs
            </action>
            <action dev="henrib" type="fix" issue="JEXL-137">
                Invalid script variable list for nested array/map access
            </action>
            <action dev="henrib" type="fix">
                Fixed Engine.getVariables that was erroneously considering method calls as variable usage
            </action>
            <action dev="henrib" type="fix">
                Fixed issue in ternary expression
                (grammar was not precise enough to differentiate namespace:function calls vs ternary right hand side)
            </action>
            <action dev="henrib" type="add">
                NaN is now a keyword equivalent to #NaN (deprecated): POTENTIAL SCRIPT BREAK!
            </action>
            <action dev="henrib" type="add">
                Syntactically enforce that expressions do not contain statements: POTENTIAL EXPRESSION BREAK!
                (ie an expression is not a script and can NOT use 'if','for'... and blocks)
            </action>
            <action dev="henrib" type="add">
                Added syntactic shortcut to create parametric scripts (script source creates an anonymous function)
            </action>
            <action dev="henrib" type="fix">
                Segregated JexlScript and JexlExpression further to avoid calling JexlExpression.evaluate on JexlScript
                (instead of JexlScript.execute) which had the unexpected property of only evaluating the first statement
            </action>
            <action dev="henrib" type="fix">
                Fix an edge case of ambiguous method matching (see http://apache-commons.680414.n4.nabble.com/jexl-mathod-within-namespace-not-found-if-parameter-is-int-tt4637888.html)
            </action>
            <action dev="henrib" type="fix">
                Fix issue wrt isEmpty and method varargs (assignable types vs equal types)
                (see http://apache-commons.680414.n4.nabble.com/jexl-empty-function-crashes-if-called-with-int-tt4637895.html)
            </action>
            <action dev="henrib" type="add" issue="JEXL-133" due-to="Alfred Reibenschuh">
                String matching Operator short-hand inspired by CSS3
            </action>
            <action dev="henrib" type="add" >
                Added the range operator (x .. y)
            </action>
            <action dev="henrib" type="add" issue="JEXL-128" due-to="Matteo Trotta">
                ObjectContext should implement NamespaceResolver
            </action>
            <action dev="henrib" type="add" issue="JEXL-127">
                Allow the creation of functions
            </action>
            <action dev="henrib" type="add" issue="JEXL-123">
                Redesign API for stability
            </action>
            <action dev="henrib" type="add" issue="JEXL-122">
                Move JEXL from org.apache.comms.jexl2 to org.apache.commons.jexl3
            </action>
            <action dev="henrib" type="fix" issue="JEXL-136">
                Script calls within scripts may fail with number arguments
            </action>
            <action dev="henrib" type="fix" issue="JEXL-135" due-to="Tomas Kukosa">
                using map as script parameter or local variable
            </action>
            <action dev="henrib" type="fix" issue="JEXL-134" due-to="Manoj Mokashi">
                Issue with evaluation of concat of variables : \r + \n gives 0
            </action>
            <action dev="henrib" type="fix" issue="JEXL-131" due-to="Clay Bruce">
                UnifiedJexl (2.1.x) parsing may fail with NPE
            </action>
            <action dev="henrib" type="fix" issue="JEXL-130" due-to="William Bakker">
                Ternary Conditional fails for Object values
            </action>
            <action dev="henrib" type="add" issue="JEXL-126" due-to="Grace">
                Decimal numbers literals fix be 'double' by default (instead of 'float')
            </action>
        </release>
        <release version="2.1.1" date="2011-12-24">
            <action dev="henrib" type="fix" issue="JEXL-124">
                Array parameters to methods don't work anymore (regression)
            </action>
        </release>
        <release version="2.1" date="2011-13-11">
            <action dev="henrib" type="add" issue="JEXL-121">
                Add simple template features
            </action>
            <action dev="henrib" type="fix" issue="JEXL-120" due-to="Lukas Krecan">
                Make ParseException work in sandboxed environment
            </action>
            <action dev="henrib" type="add" issue="JEXL-119">
                Allow indexed properties container resolution in expressions
            </action>
            <action dev="henrib" type="add" issue="JEXL-118" due-to="Max Tardiveau">
                Provide an IN operator: =~ / match operator extended to provide IN behavior (!~ as NOT IN)
            </action>
            <action dev="henrib" type="add" issue="JEXL-116" due-to="Sarel Botha">
                Add control over classes, methods, constructors and properties allowed in scripts
            </action>
            <action dev="henrib" type="add" issue="JEXL-115" due-to="Sarel Botha">
                Add support for asynchronous script execution and cancellation
            </action>
            <action dev="henrib" type="add" issue="JEXL-114">
                Allow scripts to create local variables // Add return keyword
            </action>
            <action dev="henrib" type="add" issue="JEXL-113" due-to="Max Tardiveau">
                Add functions to extract which variables, parameters and local variables are used to evaluate a script
            </action>
            <action dev="henrib" type="fix" issue="JEXL-112" due-to="sebb">
                Cannot parse Integer.MIN_VALUE.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-24" due-to="freish">
                Support Long for integer literal instead of Integers.
            </action>
            <action dev="henrib" type="add">
                Added ObjectContext that wraps an object as JexlContext and added JexlContext as source to solve
                top-level namespace functions.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-111" due-to="freish">
                expression execute error depending on numeric type
            </action>
            <action dev="henrib" type="add" issue="JEXL-83" due-to="sebb">
                Make JexlArithmetic immutable (and threadsafe); also added a mutable JexlThreadedArithmetic.
            </action>
            <action dev="henrib" type="fix" issue="JEXL-108" due-to="Cristian Lorenzetto">
                Parsing error if i define a empty literal array/map
            </action>
            <action dev="henrib" type="fix" issue="JEXL-107">
                Literals and parenthesized expressions can not be used as references
            </action>
            <action dev="henrib" type="fix" issue="JEXL-106" due-to="Michal Sabol">
                When divide two BigDecimal values in an expression it results in java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
            </action>
            <action dev="henrib" type="add" issue="JEXL-105" due-to="Cary Thompson">Array literals are considered constant even when they are not.</action>
            <action dev="henrib" type="fix" issue="JEXL-104" due-to="Andreas Haufler">NPE in JexlArithmetic when an Array-Expression containing a null is used.</action>
            <action dev="henrib" type="add" issue="JEXL-102" due-to="sebb">Add "jexl2" as a supported name</action>
            <action dev="henrib" type="add" issue="JEXL-101" due-to="Tobias Shulte">
                Vararg methods where the first argument is no vararg can not be called with only the fixed parameters given
            </action>
        </release>
        <release version="2.0.1" date="2010-03-28">
            <action dev="henrib" type="add" issue="JEXL-100">Array access expressions fail when evaluated twice and cache is enabled</action>
            <action dev="henrib" type="add" issue="JEXL-99" due-to="Marcel Schoen">Documentation of Thread Safety / Invalid code examples on homepage</action>
            <action dev="henrib" type="add" issue="JEXL-98" due-to="Marcel Schoen">Quote escaping cannot be escaped</action>
        </release>
        <release version="2.0" date="2010-02-02">
            <action dev="henrib" type="add" issue="JEXL-27" due-to="Weikuo Liaw">Bean-ish &amp; ant-ish like assignment</action>
            <action dev="henrib" type="add" issue="JEXL-19" due-to="Jesse Glick">Ternary operator support</action>
            <action dev="henrib" type="add" issue="JEXL-46" due-to="Alfred Reibenschuh">adding Perl-like regular-expression operators</action>
            <action dev="henrib" type="add" issue="JEXL-41" due-to="Alejandro Torras">Support for ${...} and #{...} expressions</action>
            <action dev="henrib" type="add" issue="JEXL-15" due-to="Paul Libbrecht">User definable functions</action>
            <action dev="sebb" type="add" issue="JEXL-63">JSR-223 support</action>
            <action dev="henrib" type="update" issue="JEXL-10" due-to="Paul Libbrecht">Make possible checking for unresolved variables</action>
            <action dev="henrib" type="update" issue="JEXL-11" due-to="Paul Libbrecht">Don&quot;t make null convertible into anything</action>
            <action dev="henrib" type="fix" issue="JEXL-47" due-to="sebb">Allow single-line comments with //</action>
            <action dev="henrib" type="fix" issue="JEXL-44" due-to="sebb">Comments don&quot;t allow double-quotes</action>
            <action dev="henrib" type="add" issue="JEXL-71" due-to="sebb">Array literal syntax is not supported</action>
            <action dev="dion" type="fix" issue="JEXL-17" due-to="Nestor Urquiza">allowing quote escaping</action>
            <action dev="dion" type="fix" issue="JEXL-25" due-to="Marek Lewczuk">Call method with varargs</action>
            <action dev="dion" type="fix" issue="JEXL-32" due-to="Kedar Dave">BigDecimal values are treated as Long values which results in loss of precision</action>
            <action dev="dion" type="fix" issue="JEXL-33">Remove unnecessary throws Exception from various classes</action>
            <action dev="henrib" type="fix" issue="JEXL-50" due-to="sebb">Div operator does not do integer division</action>
            <action dev="henrib" type="fix" issue="JEXL-87" due-to="sebb">Inconsistent behavior of arithmetical operations</action>
            <action dev="henrib" type="fix" issue="JEXL-21" due-to="AC">operator overloading / hooks on operator processing</action>
            <action dev="henrib" type="add">&quot;new&quot; operator support</action>
            <action dev="henrib" type="add">Support Unicode escapes in string literals</action>
            <action dev="henrib" type="update">Various performance enhancements &amp; caches</action>
        </release>
        <release version="1.1.1-SNAPSHOT" date="unreleased">
            <action dev="dion" type="update" issue="JEXL-23">Fix jdk1.3 only code that has crept into JEXL tests</action>
            <action dev="dion" type="update" issue="JEXL-22" due-to="Randy H.">Allow unicode literals to be used</action>
        </release>
        <release version="1.1" date="2006-09-10">
            <action dev="rahul" type="fix" issue="JEXL-17" due-to="Kohsuke Kawaguchi">Consistently throw ParseException in case of a parsing failure, not an Error.</action>
            <action dev="dion" type="fix" issue="JEXL-3" due-to="Guido Anzuoni">Allow for static methods to be called on classes and not just objects.</action>
            <action dev="dion" type="add">Added Script and ScriptFactory to allow scripts to be executed from text, files or a URL.</action>
            <action dev="dion" type="add">Added implementation for bitwise operators: and, complement, or, xor.</action>
            <action dev="dion" type="add">Added implementation for the foreach statement.</action>
            <action dev="dion" type="add">Added implementation for the while statement.</action>
            <action dev="dion" type="add">Added implementation for block statements, e.g. curly braces containing multiple statements.</action>
            <action dev="dion" type="add">Added implementation for the if statement.</action>
            <action dev="dion" type="fix" issue="JEXL-6">Unary minus was only working for integer values.</action>
            <action dev="dion" type="update">Add @since tags to code so we can track API additions via javadoc</action>
            <action dev="dion" type="add" issue="JEXL-4" due-to="Barry Lagerweij">Support assignment to variables</action>
            <action dev="dion" type="fix" issue="JEXL-5">'abc'.substring(0,1+1) is empty (method matching problem)</action>
        </release>
        <release version="1.0" date="2004-09-07">
            <action dev="dion" type="fix">Support ant-style properties</action>
        </release>
        <release version="1.0-RC1" date="2004-08-26">
            <action dev="dion" type="fix" due-to="Geoff Waggott">Fix string concatenation broken for variables</action>
            <action dev="dion" type="fix" issue="JEXL-12">Implement short circuit logic for boolean and/or</action>
            <action dev="dion" type="add">Handle any size() method that returns an int</action>
            <action dev="dion" type="fix" issue="JEXL-9">Can't issue .size() on java.util.Set</action>
        </release>
    </body>
</document>
