You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2023/12/19 08:56:45 UTC
(commons-jexl) branch master updated: JEXL-412: try a different map-entry vs ns call resolution;
This is an automated email from the ASF dual-hosted git repository.
henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
The following commit(s) were added to refs/heads/master by this push:
new 5072cdd3 JEXL-412: try a different map-entry vs ns call resolution;
5072cdd3 is described below
commit 5072cdd36c1e80e0889f24133606a8cf6d7d4fe7
Author: Henri Biestro <hb...@cloudera.com>
AuthorDate: Mon Dec 18 19:26:21 2023 +0100
JEXL-412: try a different map-entry vs ns call resolution;
---
.../org/apache/commons/jexl3/internal/Engine.java | 3 --
.../apache/commons/jexl3/parser/JexlParser.java | 4 +--
.../org/apache/commons/jexl3/parser/Parser.jjt | 2 ++
.../org/apache/commons/jexl3/Issues400Test.java | 34 +++++++++++++---------
4 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Engine.java b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
index e824f5b2..6057d01b 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Engine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
@@ -997,9 +997,6 @@ public class Engine extends JexlEngine {
protected ASTJexlScript parse(final JexlInfo info, final JexlFeatures parsingf, final String src, final Scope scope) {
final boolean cached = src.length() < cacheThreshold && cache != null;
final JexlFeatures features = parsingf != null ? parsingf : DEFAULT_FEATURES;
- // if (features.getNameSpaces().isEmpty() && !functions.isEmpty()) {
- // features = new JexlFeatures(features).nameSpaces(functions.keySet());
- // }
final Source source = cached? new Source(features, src) : null;
ASTJexlScript script;
if (source != null) {
diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
index 290e3c01..21f8e84b 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
@@ -28,8 +28,8 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
-import java.util.function.Predicate;
+import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlException;
import org.apache.commons.jexl3.JexlFeatures;
@@ -602,7 +602,7 @@ public abstract class JexlParser extends StringParser {
final String name = ns.image;
if (isVariable(name)) {
// the namespace sticks to the colon as in 'ns:fun()' (vs 'ns : fun()')
- return colon.beginColumn - 1 == ns.endColumn && isNamespace(name);
+ return colon.beginColumn - 1 == ns.endColumn && ((colon.endColumn == fun.beginColumn - 1) || isNamespace(name));
}
return true;
}
diff --git a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
index 725c5582..520b3c8c 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -890,6 +890,8 @@ void MapLiteral() : {}
void MapEntry() : {}
{
+ Identifier(true) <COLON> Expression()
+ |
Expression() <COLON> Expression()
}
diff --git a/src/test/java/org/apache/commons/jexl3/Issues400Test.java b/src/test/java/org/apache/commons/jexl3/Issues400Test.java
index c11b28c4..e1f79bb1 100644
--- a/src/test/java/org/apache/commons/jexl3/Issues400Test.java
+++ b/src/test/java/org/apache/commons/jexl3/Issues400Test.java
@@ -237,19 +237,27 @@ public class Issues400Test {
final Map<Object, Object> ctl = new HashMap<>();
ctl.put("one", 1);
ctl.put("two", 2);
- final String fnsrc = "function f(x) { x }\n" +
- "let one = 'one', two = 'two';\n" +
- "{ one : f(1), two:f(2) }";
- final JexlContext jc = new MapContext();
- final JexlEngine jexl = new JexlBuilder().create();
- try {
- final JexlScript e = jexl.createScript(fnsrc);
- final Object o = e.execute(jc);
- Assert.assertTrue(o instanceof Map);
- Map<?, ?> map = (Map<?, ?>) o;
- Assert.assertEquals(map, ctl);
- } catch (JexlException.Parsing xparse) {
- Assert.fail(fnsrc + " : " + xparse.getMessage());
+ final String fnsrc0 = "function f(x) { x }\n" +
+ "let one = 'one', two = 'two';\n";
+ for(String map0 : Arrays.asList(
+ "{ one : f(1), two:f(2) }",
+ "{ one: f(1), two: f(2) }",
+ "{ one: f(1), two:f(2) }",
+ "{ one :f(1), two:f(2) }")) {
+ final String fnsrc = fnsrc0 + map0;
+ final JexlContext jc = new MapContext();
+ final JexlEngine jexl = new JexlBuilder().create();
+ try {
+ final JexlScript e = jexl.createScript(fnsrc);
+ final Object o = e.execute(jc);
+ Assert.assertTrue(o instanceof Map);
+ Map<?, ?> map = (Map<?, ?>) o;
+ Assert.assertEquals(map, ctl);
+ } catch (JexlException.Parsing xparse) {
+ Assert.fail(fnsrc + " : " + xparse.getMessage());
+ } catch (JexlException xother) {
+ Assert.fail(fnsrc + " : " + xother.getMessage());
+ }
}
}