1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package org.codehaus.groovy.ast.expr;
47
48 import org.codehaus.groovy.ast.ClassNode;
49 import org.codehaus.groovy.ast.GroovyCodeVisitor;
50 import org.codehaus.groovy.ast.Variable;
51 import org.codehaus.groovy.syntax.Token;
52 import org.codehaus.groovy.syntax.Types;
53
54 /***
55 * Represents two expressions and an operation
56 *
57 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
58 * @version $Revision: 1.12 $
59 */
60 public class BinaryExpression extends Expression {
61
62 private Expression leftExpression;
63 private Expression rightExpression;
64 private Token operation;
65
66 public BinaryExpression(Expression leftExpression,
67 Token operation,
68 Expression rightExpression) {
69 this.leftExpression = leftExpression;
70 this.operation = operation;
71 this.rightExpression = rightExpression;
72 }
73
74 public String toString() {
75 return super.toString() +"[" + leftExpression + operation + rightExpression + "]";
76 }
77
78 public void visit(GroovyCodeVisitor visitor) {
79 visitor.visitBinaryExpression(this);
80 }
81
82 public Expression transformExpression(ExpressionTransformer transformer) {
83 Expression ret = new BinaryExpression(transformer.transform(leftExpression), operation, transformer.transform(rightExpression));
84 ret.setSourcePosition(this);
85 return ret;
86 }
87
88 public Expression getLeftExpression() {
89 return leftExpression;
90 }
91
92 public void setLeftExpression(Expression leftExpression) {
93 this.leftExpression = leftExpression;
94 }
95
96 public void setRightExpression(Expression rightExpression) {
97 this.rightExpression = rightExpression;
98 }
99
100 public Token getOperation() {
101 return operation;
102 }
103
104 public Expression getRightExpression() {
105 return rightExpression;
106 }
107
108 public String getText() {
109 if (operation.getType() == Types.LEFT_SQUARE_BRACKET) {
110 return leftExpression.getText() + "[" + rightExpression.getText() + "]";
111 }
112 return "(" + leftExpression.getText() + " " + operation.getText() + " " + rightExpression.getText() + ")";
113 }
114
115
116 /***
117 * Creates an assignment expression in which the specified expression
118 * is written into the specified variable name.
119 */
120
121 public static BinaryExpression newAssignmentExpression( Variable variable, Expression rhs ) {
122 VariableExpression lhs = new VariableExpression( variable );
123 Token operator = Token.newPlaceholder( Types.ASSIGN );
124
125 return new BinaryExpression( lhs, operator, rhs );
126 }
127
128
129 /***
130 * Creates variable initialization expression in which the specified expression
131 * is written into the specified variable name.
132 */
133
134 public static BinaryExpression newInitializationExpression( String variable, ClassNode type, Expression rhs ) {
135 VariableExpression lhs = new VariableExpression( variable );
136
137 if( type != null ) {
138 lhs.setType(type);
139 }
140
141 Token operator = Token.newPlaceholder( Types.ASSIGN );
142
143 return new BinaryExpression( lhs, operator, rhs );
144 }
145
146 }