Commit 7860e367 authored by Carlos Galindo's avatar Carlos Galindo
Browse files

Improve OutNodeVariableVisitor

parent 98cf7c78
Loading
Loading
Loading
Loading
+43 −16
Original line number Diff line number Diff line
@@ -8,52 +8,79 @@ import java.util.Set;

/** Visitor that obtains a set of variables that may have been redefined in
 *  an expression passed as parameter to a call. */
public class OutNodeVariableVisitor extends VoidVisitorAdapter<Set<NameExpr>> {
public class OutNodeVariableVisitor extends VoidVisitorAdapter<Set<Expression>> {

    @Override
    public void visit(ArrayAccessExpr n, Set<NameExpr> variables) {
    public void visit(ArrayAccessExpr n, Set<Expression> variables) {
        n.getName().accept(this, variables);
    }

    @Override
    public void visit(CastExpr n, Set<NameExpr> variables) {
    public void visit(CastExpr n, Set<Expression> variables) {
        n.getExpression().accept(this, variables);
    }

    @Override
    public void visit(ConditionalExpr n, Set<NameExpr> variables) {
    public void visit(ConditionalExpr n, Set<Expression> variables) {
        n.getThenExpr().accept(this, variables);
        n.getElseExpr().accept(this, variables);
    }

    @Override
    public void visit(EnclosedExpr n, Set<NameExpr> variables) {
    public void visit(EnclosedExpr n, Set<Expression> variables) {
        n.getInner().accept(this, variables);
    }

    @Override
    public void visit(ExpressionStmt n, Set<NameExpr> variables) {
    public void visit(ExpressionStmt n, Set<Expression> variables) {
        n.getExpression().accept(this, variables);
    }

    @Override
    public void visit(FieldAccessExpr n, Set<NameExpr> variables) {
    public void visit(FieldAccessExpr n, Set<Expression> variables) {
        n.getScope().accept(this, variables);
    }

    @Override
    public void visit(NameExpr n, Set<NameExpr> variables) {
    public void visit(ThisExpr n, Set<Expression> variables) {
        variables.add(n);
    }

    @Override
    public void visit(UnaryExpr n, Set<NameExpr> variables) {
        switch (n.getOperator()) {
            case POSTFIX_DECREMENT:
            case POSTFIX_INCREMENT:
            case PREFIX_DECREMENT:
            case PREFIX_INCREMENT:
                n.getExpression().accept(this, variables);
        }
    public void visit(NameExpr n, Set<Expression> variables) {
        variables.add(n);
    }

    // Expressions that stop the visit: no object can be outputted, modified inside the call and returned so that
    // we may access its value.

    @Override
    public void visit(UnaryExpr n, Set<Expression> variables) {}

    @Override
    public void visit(ArrayCreationExpr n, Set<Expression> arg) {}

    @Override
    public void visit(ArrayInitializerExpr n, Set<Expression> arg) {}

    @Override
    public void visit(BinaryExpr n, Set<Expression> arg) {}

    @Override
    public void visit(ClassExpr n, Set<Expression> arg) {}

    @Override
    public void visit(InstanceOfExpr n, Set<Expression> arg) {}

    @Override
    public void visit(MethodCallExpr n, Set<Expression> arg) {}

    @Override
    public void visit(ObjectCreationExpr n, Set<Expression> arg) {}

    @Override
    public void visit(LambdaExpr n, Set<Expression> arg) {}

    @Override
    public void visit(MethodReferenceExpr n, Set<Expression> arg) {}
}