| <?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.7.1" date="YYYY-MM-DD" description="This is a feature and maintenance release. Java 8 or later is required."> |
| <!-- ADD --> |
| <action dev="henrib" type="add" issue="JEXL-467">IntelliJ and VSCode editors (TextMate bundle) support for JEXL.</action> |
| <action dev="henrib" due-to="Claude" type="add" issue="JEXL-469">Add JexlFeatures.namespaceInstantiation(boolean) to control whether a namespace bound to a Class or class-name string is reflectively auto-instantiated into a functor; string namespaces now resolve through the permission-aware uberspect.</action> |
| <!-- FIX --> |
| <action dev="henrib" type="fix" issue="JEXL-466">IllegalStateException parsing a template with string interpolation.</action> |
| <action dev="NikRom5531" due-to="Felix Rudolphi" type="fix" issue="JEXL-411">Leading zeroes in floating point numbers should be optional.</action> |
| <action dev="ggregory" type="fix" due-to="Gary Gregory">Pick up commons.jacoco.version from the parent POM.</action> |
| <action dev="ggregory" type="fix" due-to="Gary Gregory">Add messages when throwing NullPointerException.</action> |
| <action dev="henrib" due-to="Claude" type="fix" issue="JEXL-468">Improve robustness of introspection permissions and sandbox delegation: close nested-class and interface-method denial gaps, fix class-initialization ordering, gate sandbox iteration, fix permission-parser polarity, deny second-stage compiler surface under RESTRICTED, and enforce parser feature restrictions in sub-parsers.</action> |
| <action dev="henrib" due-to="Claude" type="fix" issue="JEXL-470">Fix several parser and interpreter correctness issues: Unicode escape hex-digit validation, safe-navigation array-access child indexing, regex escape preservation, empty()/size() error and cancellation propagation, and switch+continue semantics.</action> |
| <!-- UPDATE --> |
| <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 102 to 104.</action> |
| </release> |
| <release version="3.7.0" date="2026-06-28" description="This is a feature and maintenance release. Java 8 or later is required."> |
| <!-- ADD --> |
| <action dev="henrib" type="add" issue="JEXL-465">Add JexlConfigLoader to build a JexlEngine from a YAML configuration (permissions, features, arithmetic, namespaces, imports).</action> |
| <action dev="henrib" type="add" issue="JEXL-464">Default permissions are SECURE and default features harden parse-time behavior (disable new, global side-effects, pragmas and annotations; enable lexical scoping; loops remain available to scripts).</action> |
| <action dev="henrib" type="add" issue="JEXL-463">Add JexlPermissions.logging() to wrap a permission set and log which reflective elements are allowed or denied.</action> |
| <!-- FIX --> |
| <!-- UPDATE --> |
| </release> |
| <release version="3.6.4" date="2026-06-24" description="This is a feature and maintenance release. Java 8 or later is required."> |
| <!-- FIX --> |
| <action dev="henrib" type="fix" issue="JEXL-462">JexlPermissions.RESTRICTED must ensure a better level of isolation.</action> |
| <!-- ADD --> |
| <!-- UPDATE --> |
| </release> |
| <release version="3.6.3" date="2026-06-20" |
| description="This is a feature and maintenance release. Java 8 or later is required."> |
| <!-- FIX --> |
| <action dev="henrib" type="fix" issue="JEXL-461" due-to="David Costanzo">Updates/improvements to the site documentation for JEXL Syntax.</action> |
| <action dev="henrib" type="fix" issue="JEXL-459" due-to="Mirek Hankus">Empty/size functions swallow all exceptions with no trace.</action> |
| <action dev="henrib" type="fix" issue="JEXL-458" due-to="Daniil Averin">Improve permissions expressivity</action> |
| <action dev="henrib" type="fix" issue="JEXL-457" due-to="Daniil Averin">Reduce default exposure for RESTRICTED JexlPermissions</action> |
| <action dev="henrib" type="fix" issue="JEXL-456" due-to="Vincent Bussol">Change in template parser behavior.</action> |
| <action dev="ggregory" type="fix" due-to="David Costanzo">Fix the @return tags in the Javadoc for JexlArithmetic.toBigInteger() overloads (#403).</action> |
| <!-- ADD --> |
| <!-- UPDATE --> |
| <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 96 to 102.</action> |
| <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-logging:commons-logging from 1.3.5 to 1.4.0.</action> |
| <action type="update" dev="ggregory" due-to="Gary Gregory">Bump com.google.code.gson:gson from 2.13.2 to 2.14.0.</action> |
| </release> |
| <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 & 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 (<<, >>>, >>) |
| </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 '<?>.<null>(...)' |
| </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 & 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"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"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">"new" operator support</action> |
| <action dev="henrib" type="add">Support Unicode escapes in string literals</action> |
| <action dev="henrib" type="update">Various performance enhancements & 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> |