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 AssignExpr extends Expression {
32cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
33cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public enum Operator {
34cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        assign, // =
35cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        plus, // +=
36cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        minus, // -=
37cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        star, // *=
38cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        slash, // /=
39cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        and, // &=
40cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        or, // |=
41cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        xor, // ^=
42cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        rem, // %=
43cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        lShift, // <<=
44cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        rSignedShift, // >>=
45cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        rUnsignedShift, // >>>=
46cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
47cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
48cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Expression target;
49cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
50cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Expression value;
51cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
52cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    private Operator op;
53cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
54cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr() {
55cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
56cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
57cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr(Expression target, Expression value, Operator op) {
58cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setTarget(target);
59cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setValue(value);
60cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setOperator(op);
61cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
62cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
63cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr(Range range, Expression target, Expression value, Operator op) {
64cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        super(range);
65cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setTarget(target);
66cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setValue(value);
67cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        setOperator(op);
68cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
69cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
70cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    @Override
71cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public <R, A> R accept(GenericVisitor<R, A> v, A arg) {
72cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return v.visit(this, arg);
73cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
74cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
75cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    @Override
76cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public <A> void accept(VoidVisitor<A> v, A arg) {
77cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        v.visit(this, arg);
78cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
79cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
80cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Operator getOperator() {
81cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return op;
82cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
83cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
84cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Expression getTarget() {
85cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return target;
86cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
87cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
88cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public Expression getValue() {
89cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return value;
90cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
91cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
92cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr setOperator(Operator op) {
93cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.op = op;
94cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
95cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
96cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
97cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr setTarget(Expression target) {
98cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.target = target;
99cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti		setAsParentNodeOf(this.target);
100cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
101cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
102cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti
103cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    public AssignExpr setValue(Expression value) {
104cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        this.value = value;
105cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti		setAsParentNodeOf(this.value);
106cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti        return this;
107cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti    }
108cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti}
109