1cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti/*
2cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team.
4cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *
5cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * This file is part of JavaParser.
6cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *
7cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * JavaParser can be used either under the terms of
8cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * a) the GNU Lesser General Public License as published by
9cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *     the Free Software Foundation, either version 3 of the License, or
10cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *     (at your option) any later version.
11cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * b) the terms of the Apache License
12cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *
13cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and
14cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * LICENCE.APACHE. Please refer to those files for details.
15cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti *
16cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * JavaParser is distributed in the hope that it will be useful,
17cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of
18cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * GNU Lesser General Public License for more details.
20cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti */
21cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
22cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettipackage com.github.javaparser.ast.expr;
23cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
24cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettiimport com.github.javaparser.Range;
25cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettiimport com.github.javaparser.ast.visitor.GenericVisitor;
26cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettiimport com.github.javaparser.ast.visitor.VoidVisitor;
27cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
28cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti/**
29cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * @author Julio Vilmar Gesser
30cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti */
31cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettipublic final class BinaryExpr extends Expression {
32cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
33cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public enum Operator {
34cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        or, // ||
35cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        and, // &&
36cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        binOr, // |
37cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        binAnd, // &
38cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        xor, // ^
39cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        equals, // ==
40cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        notEquals, // !=
41cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        less, // <
42cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        greater, // >
43cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        lessEquals, // <=
44cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        greaterEquals, // >=
45cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        lShift, // <<
46cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        rSignedShift, // >>
47cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        rUnsignedShift, // >>>
48cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        plus, // +
49cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        minus, // -
50cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        times, // *
51cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        divide, // /
52cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        remainder, // %
53cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
54cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
55cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Expression left;
56cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
57cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Expression right;
58cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
59cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Operator op;
60cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
61cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr() {
62cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
63cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
64cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr(Expression left, Expression right, Operator op) {
65cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setLeft(left);
66cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setRight(right);
67cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setOperator(op);
68cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
69cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
70cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr(Range range, Expression left, Expression right, Operator op) {
71cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        super(range);
72cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setLeft(left);
73cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setRight(right);
74cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    	setOperator(op);
75cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
76cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
77cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    @Override
78cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public <R, A> R accept(GenericVisitor<R, A> v, A arg) {
79cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return v.visit(this, arg);
80cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
81cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
82cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    @Override
83cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public <A> void accept(VoidVisitor<A> v, A arg) {
84cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        v.visit(this, arg);
85cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
86cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
87cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Expression getLeft() {
88cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return left;
89cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
90cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
91cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Operator getOperator() {
92cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return op;
93cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
94cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
95cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Expression getRight() {
96cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return right;
97cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
98cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
99cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr setLeft(Expression left) {
100cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.left = left;
101cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti		setAsParentNodeOf(this.left);
102cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
103cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
104cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
105cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr setOperator(Operator op) {
106cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.op = op;
107cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
108cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
109cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
110cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public BinaryExpr setRight(Expression right) {
111cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.right = right;
112cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti		setAsParentNodeOf(this.right);
113cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
114cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
115cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti}
116