class VoidExpressionVisitor extends ExpressionVisitorBase<Void> {

    @Override
    public Void visitExpression(Expression e) {
        return null;
    }

    @Override
    public Void visitAlias(Alias e) {
        return e.getNonAliasExpression().accept(this);
    }

    @Override
    public Void visitExpressionColumn(ExpressionColumn e) {
        return null;
    }

    @Override
    public Void visitExpressionList(ExpressionList e) {
        for (Expression e2 : e.getList()) {
            e2.accept(this);
        }
        return null;
    }

    @Override
    public Void visitOperation(Operation e) {
        e.getLeft().accept(this);
        if (e.getRight() != null)
            e.getRight().accept(this);
        return null;
    }

    @Override
    public Void visitParameter(Parameter e) {
        return null;
    }

    @Override
    public Void visitRownum(Rownum e) {
        return null;
    }

    @Override
    public Void visitSequenceValue(SequenceValue e) {
        return null;
    }

    @Override
    public Void visitSubQuery(SubQuery e) {
        visitQuery(e.getQuery());
        return null;
    }

    protected Void visitQuery(Query query) {
        query.accept(this);
        return null;
    }

    @Override
    public Void visitValueExpression(ValueExpression e) {
        return null;
    }

    @Override
    public Void visitVariable(Variable e) {
        return null;
    }

    @Override
    public Void visitWildcard(Wildcard e) {
        return null;
    }

    @Override
    public Void visitCompareLike(CompareLike e) {
        e.getLeft().accept(this);
        e.getRight().accept(this);
        if (e.getEscape() != null)
            e.getEscape().accept(this);
        return null;
    }

    @Override
    public Void visitComparison(Comparison e) {
        e.getLeft().accept(this);
        if (e.getRight() != null)
            e.getRight().accept(this);
        return null;
    }

    @Override
    public Void visitConditionAndOr(ConditionAndOr e) {
        e.getLeft().accept(this);
        e.getRight().accept(this);
        return null;
    }

    @Override
    public Void visitConditionExists(ConditionExists e) {
        visitQuery(e.getQuery());
        return null;
    }

    @Override
    public Void visitConditionIn(ConditionIn e) {
        e.getLeft().accept(this);
        for (Expression e2 : e.getValueList()) {
            e2.accept(this);
        }
        return null;
    }

    @Override
    public Void visitConditionInConstantSet(ConditionInConstantSet e) {
        e.getLeft().accept(this);
        return null;
    }

    @Override
    public Void visitConditionInSelect(ConditionInSelect e) {
        e.getLeft().accept(this);
        visitQuery(e.getQuery());
        return null;
    }

    @Override
    public Void visitConditionNot(ConditionNot e) {
        e.getCondition().accept(this);
        return null;
    }

    @Override
    public Void visitAggregate(Aggregate e) {
        if (e.getOn() != null)
            e.getOn().accept(this);
        return null;
    }

    @Override
    public Void visitAGroupConcat(AGroupConcat e) {
        if (e.getOn() != null)
            e.getOn().accept(this);
        if (e.getGroupConcatSeparator() != null)
            e.getGroupConcatSeparator().accept(this);
        if (e.getGroupConcatOrderList() != null) {
            for (SelectOrderBy o : e.getGroupConcatOrderList()) {
                o.expression.accept(this);
            }
        }
        return null;
    }

    @Override
    public Void visitJavaAggregate(JavaAggregate e) {
        for (Expression e2 : e.getArgs()) {
            if (e2 != null)
                e2.accept(this);
        }
        return null;
    }

    @Override
    public Void visitFunction(Function e) {<FILL_FUNCTION_BODY>}

    @Override
    public Void visitJavaFunction(JavaFunction e) {
        for (Expression e2 : e.getArgs()) {
            if (e2 != null)
                e2.accept(this);
        }
        return null;
    }

    @Override
    public Void visitTableFunction(TableFunction e) {
        for (Expression e2 : e.getArgs()) {
            if (e2 != null)
                e2.accept(this);
        }
        return null;
    }

    @Override
    public Void visitSelect(Select s) {
        ExpressionVisitor<Void> v2 = incrementQueryLevel(1);
        ArrayList<Expression> expressions = s.getExpressions();
        for (int i = 0, size = expressions.size(); i < size; i++) {
            Expression e = expressions.get(i);
            e.accept(v2);
        }
        if (s.getCondition() != null) {
            s.getCondition().accept(v2);
        }
        if (s.getHaving() != null) {
            s.getHaving().accept(v2);
        }
        return null;
    }

    @Override
    public Void visitSelectUnion(SelectUnion su) {
        su.getLeft().accept(this);
        su.getRight().accept(this);
        return null;
    }
}

        for (Expression e2 : e.getArgs()) {
            if (e2 != null)
                e2.accept(this);
        }
        return null;
    
<methods>public non-sealed void <init>() ,public int getQueryLevel() ,public ExpressionVisitorBase<java.lang.Void> incrementQueryLevel(int) ,public void setQueryLevel(int) <variables>private int queryLevel