1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl3.parser;
18
19 import org.apache.commons.jexl3.JexlArithmetic;
20 import org.apache.commons.jexl3.JexlOperator;
21 import org.apache.commons.jexl3.internal.ScriptVisitor;
22
23
24
25
26 final class OperatorController extends ScriptVisitor {
27 static final OperatorController INSTANCE = new OperatorController();
28
29
30
31
32
33
34 boolean isStrict(final JexlArithmetic arithmetic, final JexlNode node) {
35 if (arithmetic.isStrict()) {
36 final Object ctl = node.jjtAccept(this, arithmetic);
37 if (ctl instanceof JexlOperator) {
38 final JexlOperator operator = (JexlOperator) ctl;
39 return arithmetic.isStrict(operator);
40 }
41 }
42 return false;
43 }
44
45 @Override
46 protected JexlOperator visit(final ASTAddNode node, final Object data) {
47 return JexlOperator.ADD;
48 }
49
50 @Override
51 protected JexlOperator visit(final ASTBitwiseAndNode node, final Object data) {
52 return JexlOperator.AND;
53 }
54
55 @Override
56 protected JexlOperator visit(final ASTBitwiseComplNode node, final Object data) {
57 return JexlOperator.COMPLEMENT;
58 }
59
60 @Override
61 protected JexlOperator visit(final ASTBitwiseOrNode node, final Object data) {
62 return JexlOperator.OR;
63 }
64
65 @Override
66 protected JexlOperator visit(final ASTBitwiseXorNode node, final Object data) {
67 return JexlOperator.XOR;
68 }
69
70 @Override
71 protected JexlOperator visit(final ASTDivNode node, final Object data) {
72 return JexlOperator.DIVIDE;
73 }
74
75 @Override
76 protected JexlOperator visit(final ASTEQNode node, final Object data) {
77 return JexlOperator.EQ;
78 }
79
80 @Override
81 protected JexlOperator visit(final ASTEQSNode node, final Object data) {
82 return JexlOperator.EQSTRICT;
83 }
84
85 @Override
86 protected JexlOperator visit(final ASTERNode node, final Object data) {
87 return JexlOperator.CONTAINS;
88 }
89
90 @Override
91 protected JexlOperator visit(final ASTEWNode node, final Object data) {
92 return JexlOperator.ENDSWITH;
93 }
94
95 @Override
96 protected JexlOperator visit(final ASTGENode node, final Object data) {
97 return JexlOperator.GTE;
98 }
99
100 @Override
101 protected JexlOperator visit(final ASTGTNode node, final Object data) {
102 return JexlOperator.GT;
103 }
104
105 @Override
106 protected JexlOperator visit(final ASTLENode node, final Object data) {
107 return JexlOperator.LTE;
108 }
109
110 @Override
111 protected JexlOperator visit(final ASTLTNode node, final Object data) {
112 return JexlOperator.LT;
113 }
114
115 @Override
116 protected JexlOperator visit(final ASTModNode node, final Object data) {
117 return JexlOperator.MOD;
118 }
119
120 @Override
121 protected JexlOperator visit(final ASTMulNode node, final Object data) {
122 return JexlOperator.MULTIPLY;
123 }
124
125 @Override
126 protected JexlOperator visit(final ASTNENode node, final Object data) {
127 return JexlOperator.EQ;
128 }
129
130 @Override
131 protected JexlOperator visit(final ASTNESNode node, final Object data) {
132 return JexlOperator.EQSTRICT;
133 }
134
135 @Override
136 protected JexlOperator visit(final ASTNEWNode node, final Object data) {
137 return JexlOperator.ENDSWITH;
138 }
139
140 @Override
141 protected JexlOperator visit(final ASTNotNode node, final Object data) {
142 return JexlOperator.NOT;
143 }
144
145 @Override
146 protected JexlOperator visit(final ASTNRNode node, final Object data) {
147 return JexlOperator.CONTAINS;
148 }
149
150 @Override
151 protected JexlOperator visit(final ASTNSWNode node, final Object data) {
152 return JexlOperator.STARTSWITH;
153 }
154
155 @Override
156 protected JexlOperator visit(final ASTSetAddNode node, final Object data) {
157 return JexlOperator.SELF_ADD;
158 }
159
160 @Override
161 protected JexlOperator visit(final ASTSetAndNode node, final Object data) {
162 return JexlOperator.SELF_AND;
163 }
164
165 @Override
166 protected JexlOperator visit(final ASTSetDivNode node, final Object data) {
167 return JexlOperator.SELF_DIVIDE;
168 }
169
170 @Override
171 protected JexlOperator visit(final ASTSetModNode node, final Object data) {
172 return JexlOperator.SELF_MOD;
173 }
174
175 @Override
176 protected JexlOperator visit(final ASTSetMultNode node, final Object data) {
177 return JexlOperator.SELF_MULTIPLY;
178 }
179
180 @Override
181 protected JexlOperator visit(final ASTSetOrNode node, final Object data) {
182 return JexlOperator.SELF_OR;
183 }
184
185 @Override
186 protected JexlOperator visit(final ASTSetSubNode node, final Object data) {
187 return JexlOperator.SELF_SUBTRACT;
188 }
189
190 @Override
191 protected JexlOperator visit(final ASTSetXorNode node, final Object data) {
192 return JexlOperator.SELF_OR;
193 }
194
195 @Override
196 protected JexlOperator visit(final ASTSubNode node, final Object data) {
197 return JexlOperator.SUBTRACT;
198 }
199
200 @Override
201 protected JexlOperator visit(final ASTSWNode node, final Object data) {
202 return JexlOperator.STARTSWITH;
203 }
204
205 @Override
206 protected JexlOperator visitNode(final JexlNode node, final Object data) {
207 return null;
208 }
209 }