protected void processPragmas()

in src/main/java/org/apache/commons/jexl3/internal/Engine.java [910:961]


    protected void processPragmas(final ASTJexlScript script, final JexlContext context, final JexlOptions opts) {
        final Map<String, Object> pragmas = script.getPragmas();
        if (pragmas != null && !pragmas.isEmpty()) {
            final JexlContext.PragmaProcessor processor =
                    context instanceof JexlContext.PragmaProcessor
                            ? (JexlContext.PragmaProcessor) context
                            : null;
            Map<String, Object> ns = null;
            for (final Map.Entry<String, Object> pragma : pragmas.entrySet()) {
                final String key = pragma.getKey();
                final Object value = pragma.getValue();
                if (PRAGMA_OPTIONS.equals(key)) {
                    if (value instanceof String) {
                        // jexl.options
                        final String[] vs = value.toString().split(" ");
                        opts.setFlags(vs);
                    }
                }  else if (PRAGMA_IMPORT.equals(key)) {
                    // jexl.import, may use a set
                    final Set<String> is = new LinkedHashSet<>();
                    withValueSet(value, o -> {
                        if (o instanceof String) {
                            is.add(o.toString());
                        }
                    });
                    if (!is.isEmpty()) {
                        opts.setImports(is);
                    }
                } else if (key.startsWith(PRAGMA_JEXLNS)) {
                    if (ns == null)  {
                        ns = new LinkedHashMap<>();
                    }
                    processPragmaNamespace(ns, key, value);
                    if (!ns.isEmpty()) {
                        opts.setNamespaces(ns);
                    }
                } else if (key.startsWith(PRAGMA_MODULE)) {
                    if (ns == null)  {
                        ns = new LinkedHashMap<>();
                    }
                    processPragmaModule(ns, key, value, script.jexlInfo(), context);
                    if (!ns.isEmpty()) {
                        opts.setNamespaces(ns);
                    }
                }
                // user-defined processor may alter options
                if (processor != null) {
                    processor.processPragma(opts, key, value);
                }
            }
        }
    }