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