private Object getNode(JXTExpression expr, JexlContext jexlContext, JXPathContext jxpathContext, Boolean lenient)
throws Exception {
try {
Object compiled = expr.compiledExpression;
if (compiled instanceof CompiledExpression) {
CompiledExpression e = (CompiledExpression)compiled;
boolean oldLenient = jxpathContext.isLenient();
if (lenient != null) jxpathContext.setLenient(lenient.booleanValue());
try {
Iterator iter = e.iteratePointers(jxpathContext);
if (iter.hasNext()) {
Pointer first = (Pointer)iter.next();
if (iter.hasNext()) {
List result = new LinkedList();
result.add(first.getNode());
boolean dom = (first.getNode() instanceof Node);
while (iter.hasNext()) {
Object obj = ((Pointer)iter.next()).getNode();
dom = dom && (obj instanceof Node);
result.add(obj);
}
Object[] arr;
if (dom) {
arr = new Node[result.size()];
} else {
arr = new Object[result.size()];
}
result.toArray(arr);
return arr;
}
return first.getNode();
}
return null;
} finally {
jxpathContext.setLenient(oldLenient);
}
} else if (compiled instanceof Expression) {
Expression e = (Expression)compiled;
return e.evaluate(jexlContext);
}
return expr.raw;
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
if (t instanceof Exception) {
throw (Exception)t;
}
throw (Error)t;
}