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 ff9f3b6e JEXL: fix parsing error caused by ternary and ns call in lambda; ff9f3b6e is described below commit ff9f3b6eaaa87314d0706b418945209b356af1e7 Author: henrib <hen...@apache.org> AuthorDate: Mon Apr 15 19:19:40 2024 +0200 JEXL: fix parsing error caused by ternary and ns call in lambda; --- .../org/apache/commons/jexl3/parser/Parser.jjt | 1 + .../org/apache/commons/jexl3/Issues400Test.java | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) 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 7e3824b3..93e22d9e 100644 --- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt +++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt @@ -399,6 +399,7 @@ void StatementNoVar() #void : {} | LOOKAHEAD(<BREAK>) Break() | LOOKAHEAD(<THROW>) ThrowStatement() | LOOKAHEAD(<TRY>) TryStatement() + | LOOKAHEAD(LambdaLookahead()) Lambda() | LOOKAHEAD(Expression()) ExpressionStatement() | Block() | LOOKAHEAD(<VAR>, {!getFeatures().isLexical()} ) Var() diff --git a/src/test/java/org/apache/commons/jexl3/Issues400Test.java b/src/test/java/org/apache/commons/jexl3/Issues400Test.java index 249efeec..fb64b811 100644 --- a/src/test/java/org/apache/commons/jexl3/Issues400Test.java +++ b/src/test/java/org/apache/commons/jexl3/Issues400Test.java @@ -391,4 +391,26 @@ public class Issues400Test { Assert.assertEquals(42, result); } + public static class VinzContext extends MapContext { + public String member(String m, String u) { + return m + '.' + u; + } + } + + @Test + public void testNamespaceVsTernary() { + VinzContext ctxt = new VinzContext(); + ctxt.set("Users", "USERS"); + final JexlEngine jexl = new JexlBuilder().safe(false).strict(true).silent(false).create(); + JexlScript script = jexl.createScript("() -> {\n" + + " var fn = (user) -> {\n" + + " user ? user : member(Users, 'user');\n" + + " }\n" + + "}"); + Object r = script.execute(ctxt); + Assert.assertNotNull(r); + script = (JexlScript) r; + r = script.execute(ctxt); + Assert.assertEquals("USERS.user", r); + } }