package ql.ast.expression_evaluator; import ql.ast.expression.BinaryExpression; import ql.ast.expression.Id; import ql.ast.expression.IdSet; import ql.ast.expression.ParenthesesExpression; import ql.ast.expression.UnaryExpression; import ql.ast.expression.arithmetic.Add; import ql.ast.expression.arithmetic.Divide; import ql.ast.expression.arithmetic.Multiply; import ql.ast.expression.arithmetic.Remainder; import ql.ast.expression.arithmetic.Subtract; import ql.ast.expression.arithmetic.UnaryMinus; import ql.ast.expression.arithmetic.UnaryPlus; import ql.ast.expression.comparison.Equal; import ql.ast.expression.comparison.GreaterThan; import ql.ast.expression.comparison.GreaterThanEqual; import ql.ast.expression.comparison.LessThan; import ql.ast.expression.comparison.LessThanEqual; import ql.ast.expression.comparison.NotEqual; import ql.ast.expression.literal.BooleanLiteral; import ql.ast.expression.literal.NumberLiteral; import ql.ast.expression.literal.StringLiteral; import ql.ast.expression.logical.LogicalAnd; import ql.ast.expression.logical.LogicalOr; import ql.ast.expression.logical.Not; import ql.ast.visitor_elements.IExpressionElementVisitor; /** * @author orosu */ public class ExpressionIdSetBuilderVisitor implements IExpressionElementVisitor<IdSet> { public ExpressionIdSetBuilderVisitor() { } @Override public IdSet visit(Id id) { IdSet idSet = new IdSet(); idSet.add(id); return idSet; } @Override public IdSet visit(Add add) { return this._getIdSetFromBinaryExpression(add); } @Override public IdSet visit(Divide divide) { return this._getIdSetFromBinaryExpression(divide); } @Override public IdSet visit(Multiply multiply) { return this._getIdSetFromBinaryExpression(multiply); } @Override public IdSet visit(Remainder remainder) { return this._getIdSetFromBinaryExpression(remainder); } @Override public IdSet visit(Subtract subtract) { return this._getIdSetFromBinaryExpression(subtract); } @Override public IdSet visit(LogicalAnd logicalAnd) { return this._getIdSetFromBinaryExpression(logicalAnd); } @Override public IdSet visit(LogicalOr logicalOr) { return this._getIdSetFromBinaryExpression(logicalOr); } @Override public IdSet visit(Equal equal) { return this._getIdSetFromBinaryExpression(equal); } @Override public IdSet visit(NotEqual notEqual) { return this._getIdSetFromBinaryExpression(notEqual); } @Override public IdSet visit(GreaterThan greaterThan) { return this._getIdSetFromBinaryExpression(greaterThan); } @Override public IdSet visit(GreaterThanEqual greaterThanEqual) { return this._getIdSetFromBinaryExpression(greaterThanEqual); } @Override public IdSet visit(LessThan lessThan) { return this._getIdSetFromBinaryExpression(lessThan); } @Override public IdSet visit(LessThanEqual lessThanEqual) { return this._getIdSetFromBinaryExpression(lessThanEqual); } @Override public IdSet visit(Not not) { return this._getIdSetFromUnaryExpression(not); } @Override public IdSet visit(UnaryMinus unaryMinus) { return this._getIdSetFromUnaryExpression(unaryMinus); } @Override public IdSet visit(UnaryPlus unaryPlus) { return this._getIdSetFromUnaryExpression(unaryPlus); } @Override public IdSet visit(ParenthesesExpression parenthesesExpression) { return this._getIdSetFromUnaryExpression(parenthesesExpression); } @Override public IdSet visit(BooleanLiteral booleanLiteral) { return new IdSet(); } @Override public IdSet visit(NumberLiteral numberLiteral) { return new IdSet(); } @Override public IdSet visit(StringLiteral stringLiteral) { return new IdSet(); } private IdSet _getIdSetFromBinaryExpression(BinaryExpression binaryExpression) { IdSet leftIdSet = binaryExpression.getLeftSubExpression().accept(this); IdSet rightIdSet = binaryExpression.getRightSubExpression().accept(this); leftIdSet.addAll(rightIdSet); return leftIdSet; } private IdSet _getIdSetFromUnaryExpression(UnaryExpression unaryExpression) { return unaryExpression.getSubExpression().accept(this); } }