BshUtil eval and treatment of context

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

BshUtil eval and treatment of context

Harmeet Bedi
It appears that BshUtil.eval overwrites updates(but not inserts) to context variables.
That did not seem right. It seemed more natural that pipeline processing of events depend on context being set in previous actions. Wondering if this is a bug and what the best fix could be.


See following code:  First context key-value is copied into Bsh 'globalNamespace', eval done, and then variables copied from bsh globalNamespace onto context, thereby overwriting any changes done to context key-values inside the 'eval'.

BshUtil.java
    public static final Object eval(String expression, Map<String, Object> context) throws EvalError {
            Interpreter bsh = makeInterpreter(context);
            // evaluate the expression
            o = bsh.eval(expression);
...
            // read back the context info
            NameSpace ns = bsh.getNameSpace();
            String[] varNames = ns.getVariableNames();
            for (String varName: varNames) {
                context.put(varName, bsh.get(varName));
            }
    }

where
    public static Interpreter makeInterpreter(Map<String, ? extends Object> context) throws EvalError {
....
            for (Map.Entry<String, ? extends Object> entry: context.entrySet()) {
                bsh.set(entry.getKey(), entry.getValue());
            }
..
        return bsh;
    }

thoughts ?
Harmeet