@Override
 public Object getReducedValue(
     final Object ctx, final Object thisValue, final VariableResolverFactory factory) {
   try {
     return !((Boolean) MVEL.eval(expr, start, offset, ctx, factory));
   } catch (final NullPointerException e) {
     throw new CompileException("negation operator applied to a null value", expr, start, e);
   } catch (final ClassCastException e) {
     throw new CompileException(
         "negation operator applied to non-boolean expression", expr, start, e);
   }
 }