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());
+    }
 }