Issues (126)

src/ModelVisitorConcerns/ProcessExpressions.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AlgoWeb\ODataMetadata\ModelVisitorConcerns;
6
7
use AlgoWeb\ODataMetadata\EdmModelVisitor;
8
use AlgoWeb\ODataMetadata\EdmUtil;
9
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IApplyExpression;
10
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IAssertTypeExpression;
11
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IBinaryConstantExpression;
12
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IBooleanConstantExpression;
13
use AlgoWeb\ODataMetadata\Interfaces\Expressions\ICollectionExpression;
14
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IDateTimeConstantExpression;
15
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IDateTimeOffsetConstantExpression;
16
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IDecimalConstantExpression;
17
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IEntitySetReferenceExpression;
18
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IEnumMemberReferenceExpression;
19
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IExpression;
20
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IFloatingConstantExpression;
21
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IFunctionReferenceExpression;
22
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IGuidConstantExpression;
23
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IIfExpression;
24
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IIntegerConstantExpression;
25
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IIsTypeExpression;
26
use AlgoWeb\ODataMetadata\Interfaces\Expressions\ILabeledExpression;
27
use AlgoWeb\ODataMetadata\Interfaces\Expressions\ILabeledExpressionReferenceExpression;
28
use AlgoWeb\ODataMetadata\Interfaces\Expressions\INullExpression;
29
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IParameterReferenceExpression;
30
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IPathExpression;
31
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IPropertyReferenceExpression;
32
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IRecordExpression;
33
use AlgoWeb\ODataMetadata\Interfaces\Expressions\IStringConstantExpression;
34
use AlgoWeb\ODataMetadata\Interfaces\Expressions\ITimeConstantExpression;
35
use AlgoWeb\ODataMetadata\Interfaces\Expressions\RecordExpression\IPropertyConstructor;
36
use AlgoWeb\ODataMetadata\Interfaces\ITypeReference;
37
38
trait ProcessExpressions
39
{
40
    protected function processExpression(IExpression $expression): void
41
    {
42
        /** @var EdmModelVisitor $this */
43
        $this->startElement($expression, __METHOD__);
44
        $this->endElement($expression, __METHOD__);
45
    }
46
47
    protected function processStringConstantExpression(IStringConstantExpression $expression): void
48
    {
49
        /** @var EdmModelVisitor $this */
50
        $this->startElement($expression, __METHOD__);
51
        $this->processExpression($expression);
52
        $this->endElement($expression, __METHOD__);
53
    }
54
55
    protected function processBinaryConstantExpression(IBinaryConstantExpression $expression): void
56
    {
57
        /** @var EdmModelVisitor $this */
58
        $this->startElement($expression, __METHOD__);
59
        $this->processExpression($expression);
60
        $this->endElement($expression, __METHOD__);
61
    }
62
63
    protected function processRecordExpression(IRecordExpression $expression): void
64
    {
65
        /** @var EdmModelVisitor $this */
66
        $this->startElement($expression, __METHOD__);
67
        $this->processExpression($expression);
68
        if (null !== $expression->getDeclaredType()) {
69
            $this->visitTypeReference($expression->getDeclaredType());
70
        }
71
72
        $this->visitPropertyConstructors($expression->getProperties());
73
        $this->endElement($expression, __METHOD__);
74
    }
75
76
    protected function processPropertyReferenceExpression(IPropertyReferenceExpression $expression): void
77
    {
78
        /** @var EdmModelVisitor $this */
79
        $this->startElement($expression, __METHOD__);
80
        $this->processExpression($expression);
81
        if (null !== $expression->getBase()) {
82
            $this->visitExpression($expression->getBase());
83
        }
84
        $this->endElement($expression, __METHOD__);
85
    }
86
87
    protected function processPathExpression(IPathExpression $expression): void
88
    {
89
        /** @var EdmModelVisitor $this */
90
        $this->startElement($expression, __METHOD__);
91
        $this->processExpression($expression);
92
        $this->endElement($expression, __METHOD__);
93
    }
94
95
    protected function processParameterReferenceExpression(IParameterReferenceExpression $expression): void
96
    {
97
        /** @var EdmModelVisitor $this */
98
        $this->startElement($expression, __METHOD__);
99
        $this->processExpression($expression);
100
        $this->endElement($expression, __METHOD__);
101
    }
102
103
    protected function processCollectionExpression(ICollectionExpression $expression): void
104
    {
105
        /** @var EdmModelVisitor $this */
106
        $this->startElement($expression, __METHOD__);
107
        $this->processExpression($expression);
108
        $this->visitExpressions($expression->getElements());
109
        $this->endElement($expression, __METHOD__);
110
    }
111
112
    protected function processLabeledExpressionReferenceExpression(
113
        ILabeledExpressionReferenceExpression $expression
114
    ): void {
115
        /** @var EdmModelVisitor $this */
116
        $this->startElement($expression, __METHOD__);
117
        $this->processExpression($expression);
118
        $this->endElement($expression, __METHOD__);
119
    }
120
121
    protected function processIsTypeExpression(IIsTypeExpression $expression): void
122
    {
123
        /** @var EdmModelVisitor $this */
124
        $this->startElement($expression, __METHOD__);
125
        $this->processExpression($expression);
126
        $this->visitTypeReference($expression->getType());
127
        $this->visitExpression($expression->getOperand());
128
        $this->endElement($expression, __METHOD__);
129
    }
130
131
    protected function processIntegerConstantExpression(IIntegerConstantExpression $expression): void
132
    {
133
        /** @var EdmModelVisitor $this */
134
        $this->startElement($expression, __METHOD__);
135
        $this->processExpression($expression);
136
        $this->endElement($expression, __METHOD__);
137
    }
138
139
    protected function processIfExpression(IIfExpression $expression): void
140
    {
141
        /** @var EdmModelVisitor $this */
142
        $this->startElement($expression, __METHOD__);
143
        $this->processExpression($expression);
144
        $this->visitExpression($expression->getTestExpression());
145
        $this->visitExpression($expression->getTrueExpression());
146
        $this->visitExpression($expression->getFalseExpression());
147
        $this->endElement($expression, __METHOD__);
148
    }
149
150
    protected function processFunctionReferenceExpression(IFunctionReferenceExpression $expression): void
151
    {
152
        /** @var EdmModelVisitor $this */
153
        $this->startElement($expression, __METHOD__);
154
        $this->processExpression($expression);
155
        $this->endElement($expression, __METHOD__);
156
    }
157
158
    protected function processFunctionApplicationExpression(IApplyExpression $expression): void
159
    {
160
        /** @var EdmModelVisitor $this */
161
        $this->startElement($expression, __METHOD__);
162
        $this->processExpression($expression);
163
        $this->visitExpression($expression->getAppliedFunction());
0 ignored issues
show
It seems like $expression->getAppliedFunction() can also be of type null; however, parameter $expression of AlgoWeb\ODataMetadata\Ed...itor::visitExpression() does only seem to accept AlgoWeb\ODataMetadata\In...Expressions\IExpression, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

163
        $this->visitExpression(/** @scrutinizer ignore-type */ $expression->getAppliedFunction());
Loading history...
164
        $this->visitExpressions($expression->getArguments());
165
        $this->endElement($expression, __METHOD__);
166
    }
167
168
    protected function processFloatingConstantExpression(IFloatingConstantExpression $expression): void
169
    {
170
        /** @var EdmModelVisitor $this */
171
        $this->startElement($expression, __METHOD__);
172
        $this->processExpression($expression);
173
        $this->endElement($expression, __METHOD__);
174
    }
175
176
    protected function processGuidConstantExpression(IGuidConstantExpression $expression): void
177
    {
178
        /** @var EdmModelVisitor $this */
179
        $this->startElement($expression, __METHOD__);
180
        $this->processExpression($expression);
181
        $this->endElement($expression, __METHOD__);
182
    }
183
184
    protected function processEnumMemberReferenceExpression(IEnumMemberReferenceExpression $expression): void
185
    {
186
        /** @var EdmModelVisitor $this */
187
        $this->startElement($expression, __METHOD__);
188
        $this->processExpression($expression);
189
        $this->endElement($expression, __METHOD__);
190
    }
191
192
    protected function processEntitySetReferenceExpression(IEntitySetReferenceExpression $expression): void
193
    {
194
        /** @var EdmModelVisitor $this */
195
        $this->startElement($expression, __METHOD__);
196
        $this->processExpression($expression);
197
        $this->endElement($expression, __METHOD__);
198
    }
199
200
    protected function processDecimalConstantExpression(IDecimalConstantExpression $expression): void
201
    {
202
        /** @var EdmModelVisitor $this */
203
        $this->startElement($expression, __METHOD__);
204
        $this->processExpression($expression);
205
        $this->endElement($expression, __METHOD__);
206
    }
207
208
    protected function processDateTimeConstantExpression(IDateTimeConstantExpression $expression): void
209
    {
210
        /** @var EdmModelVisitor $this */
211
        $this->startElement($expression, __METHOD__);
212
        $this->processExpression($expression);
213
        $this->endElement($expression, __METHOD__);
214
    }
215
216
    protected function processDateTimeOffsetConstantExpression(IDateTimeOffsetConstantExpression $expression): void
217
    {
218
        /** @var EdmModelVisitor $this */
219
        $this->startElement($expression, __METHOD__);
220
        $this->processExpression($expression);
221
        $this->endElement($expression, __METHOD__);
222
    }
223
224
    protected function processTimeConstantExpression(ITimeConstantExpression $expression): void
225
    {
226
        /** @var EdmModelVisitor $this */
227
        $this->startElement($expression, __METHOD__);
228
        $this->processExpression($expression);
229
        $this->endElement($expression, __METHOD__);
230
    }
231
232
    protected function processBooleanConstantExpression(IBooleanConstantExpression $expression): void
233
    {
234
        /** @var EdmModelVisitor $this */
235
        $this->startElement($expression, __METHOD__);
236
        $this->processExpression($expression);
237
        $this->endElement($expression, __METHOD__);
238
    }
239
240
    protected function processAssertTypeExpression(IAssertTypeExpression $expression): void
241
    {
242
        /** @var EdmModelVisitor $this */
243
        $this->startElement($expression, __METHOD__);
244
        $this->processExpression($expression);
245
        $this->visitTypeReference($expression->getType());
246
        $this->visitExpression($expression->getOperand());
247
        $this->endElement($expression, __METHOD__);
248
    }
249
250
    protected function processLabeledExpression(ILabeledExpression $expression): void
251
    {
252
        /** @var EdmModelVisitor $this */
253
        $this->startElement($expression, __METHOD__);
254
        $this->visitExpression($expression->getExpression());
255
        $this->endElement($expression, __METHOD__);
256
    }
257
258
    protected function processPropertyConstructor(IPropertyConstructor $constructor): void
259
    {
260
        EdmUtil::checkArgumentNull($constructor->getValue(), 'constructor->getValue');
261
        /** @var EdmModelVisitor $this */
262
        $this->startElement($constructor, __METHOD__);
263
        $this->visitExpression($constructor->getValue());
264
        $this->endElement($constructor, __METHOD__);
265
    }
266
267
    protected function processNullConstantExpression(INullExpression $expression): void
268
    {
269
        /** @var EdmModelVisitor $this */
270
        $this->startElement($expression, __METHOD__);
271
        $this->processExpression($expression);
272
        $this->endElement($expression, __METHOD__);
273
    }
274
}
275