public static ExpressionEvaluator compileExpression(
            String expression,
            List<String> argumentNames,
            List<Class<?>> argumentClasses,
            Class<?> returnClass) {
        ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator();
        expressionEvaluator.setParameters(
                argumentNames.toArray(new String[0]), argumentClasses.toArray(new Class[0]));
        expressionEvaluator.setExpressionType(returnClass);
        try {
            expressionEvaluator.cook(expression);
            return expressionEvaluator;
        } catch (CompileException e) {
            throw new InvalidProgramException(
                    "Expression cannot be compiled. This is a bug. Please file an issue.\nExpression: "
                            + expression,
                    e);
        }
    }
@Test
    public void testJaninoStringCompare() throws InvocationTargetException {
        String expression = "String.valueOf(\"metadata_table\").equals(__table_name__)";
        List<String> columnNames = Arrays.asList("__table_name__");
        List<Class<?>> paramTypes = Arrays.asList(String.class);
        List<Object> params = Arrays.asList("metadata_table");
        ExpressionEvaluator expressionEvaluator =
                JaninoCompiler.compileExpression(
                        expression, columnNames, paramTypes, Boolean.class);
        Object evaluate = expressionEvaluator.evaluate(params.toArray());
        Assert.assertEquals(true, evaluate);
    }