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 2022/08/25 18:13:18 UTC
[commons-jexl] branch master updated: JEXL-379: fixing jexl.import;
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 b4cd75c1 JEXL-379: fixing jexl.import;
b4cd75c1 is described below
commit b4cd75c17f64bc3200a6673423ce884bc8ad1458
Author: henrib <he...@apache.org>
AuthorDate: Thu Aug 25 20:13:12 2022 +0200
JEXL-379: fixing jexl.import;
---
.../org/apache/commons/jexl3/internal/Engine.java | 34 ++++++++++++----------
.../org/apache/commons/jexl3/Issues300Test.java | 13 +++++++++
2 files changed, 31 insertions(+), 16 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 c790408d..e44802ab 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Engine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
@@ -435,12 +435,27 @@ public class Engine extends JexlEngine {
for (final Map.Entry<String, Object> pragma : pragmas.entrySet()) {
final String key = pragma.getKey();
final Object value = pragma.getValue();
- if (value instanceof String) {
- if (PRAGMA_OPTIONS.equals(key)) {
+ if (PRAGMA_OPTIONS.equals(key)) {
+ if (value instanceof String) {
// jexl.options
final String[] vs = value.toString().split(" ");
opts.setFlags(vs);
- } else if (key.startsWith(PRAGMA_JEXLNS)) {
+ }
+ } else if (PRAGMA_IMPORT.equals(key)) {
+ // jexl.import, may use a set
+ Set<?> values = value instanceof Set<?>
+ ? (Set<?>) value
+ : Collections.singleton(value);
+ for (Object o : values) {
+ if (o instanceof String) {
+ if (is == null) {
+ is = new LinkedHashSet<>();
+ }
+ is.add(o.toString());
+ }
+ }
+ } else if (key.startsWith(PRAGMA_JEXLNS)) {
+ if (value instanceof String) {
// jexl.namespace.***
final String nsname = key.substring(PRAGMA_JEXLNS.length());
if (nsname != null && !nsname.isEmpty()) {
@@ -455,19 +470,6 @@ public class Engine extends JexlEngine {
}
}
}
- } else if (PRAGMA_IMPORT.equals(key)) {
- // jexl.import, may use a set
- Set<?> values = value instanceof Set<?>
- ? (Set<?>) value
- : Collections.singleton(value);
- for (Object o : values) {
- if (o instanceof String) {
- if (is == null) {
- is = new LinkedHashSet<>();
- }
- is.add(o.toString());
- }
- }
}
if (processor != null) {
processor.processPragma(opts, key, value);
diff --git a/src/test/java/org/apache/commons/jexl3/Issues300Test.java b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
index e223080d..94005566 100644
--- a/src/test/java/org/apache/commons/jexl3/Issues300Test.java
+++ b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
@@ -884,4 +884,17 @@ public class Issues300Test {
Assert.assertEquals(42, result);
}
+ @Test
+ public void test379a() {
+ final String src =
+ "#pragma jexl.import java.util\n"+
+ "const map = new LinkedHashMap({0 : 'zero'});";
+ JexlEngine jexl = new JexlBuilder().safe(true).create();
+ JexlScript script = jexl.createScript(src);
+ Assert.assertNotNull(script);
+ Object result = script.execute(null);
+ Assert.assertNotNull(result);
+ Assert.assertTrue(result instanceof LinkedHashMap);
+ Assert.assertEquals(1, ((Map) result).size());
+ }
}