@Override
    public Expression<?> visit(FactoryExpression<?> expr, C context) {
        List<Expression<?>> args = visit(expr.getArgs(), context);
        if (args.equals(expr.getArgs())) {
            return expr;
        } else {
            return FactoryExpressionUtils.wrap(expr, args);
        }
    }
{@code ReplaceVisitor} is a deep visitor that can be customized to replace segments of
expression trees

@param <C> context type
querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java