in src/main/java/org/apache/commons/jexl3/internal/Engine.java [429:480]
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);
}
}
}
}