32
32
use Symfony \Component \Serializer \Php \IfNode ;
33
33
use Symfony \Component \Serializer \Php \MethodCallNode ;
34
34
use Symfony \Component \Serializer \Php \NewNode ;
35
+ use Symfony \Component \Serializer \Php \ParametersNode ;
35
36
use Symfony \Component \Serializer \Php \PhpNodeInterface ;
36
37
use Symfony \Component \Serializer \Php \ReturnNode ;
37
38
use Symfony \Component \Serializer \Php \ScalarNode as PhpScalarNode ;
@@ -92,7 +93,7 @@ protected function collectionNodes(CollectionNode $node, array &$context): array
92
93
$ iterableClosureNodes = [
93
94
new ExpressionNode (new AssignNode (
94
95
new VariableNode ('iterable ' ),
95
- new ClosureNode (new ArgumentsNode (['resource ' => 'mixed ' , 'boundaries ' => 'iterable ' ]), 'iterable ' , true , [
96
+ new ClosureNode (new ParametersNode (['resource ' => 'mixed ' , 'boundaries ' => 'iterable ' ]), 'iterable ' , true , [
96
97
new ForEachNode (new VariableNode ('boundaries ' ), new VariableNode ('k ' ), new VariableNode ('b ' ), [
97
98
new ExpressionNode (new YieldNode (
98
99
new FunctionCallNode (
@@ -106,7 +107,11 @@ protected function collectionNodes(CollectionNode $node, array &$context): array
106
107
new VariableNode ('k ' ),
107
108
)),
108
109
]),
109
- ], new ArgumentsNode (['config ' => null , 'instantiator ' => null , '&providers ' => null ])),
110
+ ], new ArgumentsNode ([
111
+ new VariableNode ('config ' ),
112
+ new VariableNode ('instantiator ' ),
113
+ new VariableNode ('providers ' , byReference: true ),
114
+ ])),
110
115
)),
111
116
];
112
117
@@ -125,11 +130,15 @@ protected function collectionNodes(CollectionNode $node, array &$context): array
125
130
new ExpressionNode (new AssignNode (
126
131
new ArrayAccessNode (new VariableNode ('providers ' ), new PhpScalarNode ($ node ->identifier ())),
127
132
new ClosureNode (
128
- new ArgumentsNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
133
+ new ParametersNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
129
134
($ node ->type ->isNullable () ? '? ' : '' ).$ node ->type ->name (),
130
135
true ,
131
136
[...$ getBoundariesNodes , ...$ iterableClosureNodes , ...$ returnNodes ],
132
- new ArgumentsNode (['config ' => null , 'instantiator ' => null , '&providers ' => null ]),
137
+ new ArgumentsNode ([
138
+ new VariableNode ('config ' ),
139
+ new VariableNode ('instantiator ' ),
140
+ new VariableNode ('providers ' , byReference: true ),
141
+ ]),
133
142
),
134
143
)),
135
144
...$ this ->providerNodes ($ node ->item , $ context ),
@@ -167,7 +176,7 @@ protected function objectNodes(ObjectNode $node, array &$context): array
167
176
$ propertiesClosuresNodes [] = new IfNode (new BinaryNode ('=== ' , new PhpScalarNode ($ serializedName ), new VariableNode ('k ' )), [
168
177
new ExpressionNode (new AssignNode (
169
178
new ArrayAccessNode (new VariableNode ('properties ' ), new PhpScalarNode ($ property ['name ' ])),
170
- new ClosureNode (new ArgumentsNode ([]), 'mixed ' , true , [
179
+ new ClosureNode (new ParametersNode ([]), 'mixed ' , true , [
171
180
new ExpressionNode (new ReturnNode (($ property ['formatter ' ])(new FunctionCallNode (
172
181
new ArrayAccessNode (new VariableNode ('providers ' ), new PhpScalarNode ($ property ['value ' ]->identifier ())),
173
182
new ArgumentsNode ([
@@ -176,7 +185,13 @@ protected function objectNodes(ObjectNode $node, array &$context): array
176
185
new ArrayAccessNode (new VariableNode ('b ' ), new PhpScalarNode (1 )),
177
186
]),
178
187
)))),
179
- ], new ArgumentsNode (['resource ' => null , 'b ' => null , 'config ' => null , 'instantiator ' => null , '&providers ' => null ])),
188
+ ], new ArgumentsNode ([
189
+ new VariableNode ('resource ' ),
190
+ new VariableNode ('b ' ),
191
+ new VariableNode ('config ' ),
192
+ new VariableNode ('instantiator ' ),
193
+ new VariableNode ('providers ' , byReference: true ),
194
+ ])),
180
195
)),
181
196
new ExpressionNode (new ContinueNode ()),
182
197
]);
@@ -199,11 +214,15 @@ protected function objectNodes(ObjectNode $node, array &$context): array
199
214
new ExpressionNode (new AssignNode (
200
215
new ArrayAccessNode (new VariableNode ('providers ' ), new PhpScalarNode ($ node ->identifier ())),
201
216
new ClosureNode (
202
- new ArgumentsNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
217
+ new ParametersNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
203
218
($ node ->type ->isNullable () ? '? ' : '' ).$ node ->type ->className (),
204
219
true ,
205
220
[...$ getBoundariesNodes , ...$ fillPropertiesArrayNodes , ...$ instantiateNodes ],
206
- new ArgumentsNode (['config ' => null , 'instantiator ' => null , '&providers ' => null ]),
221
+ new ArgumentsNode ([
222
+ new VariableNode ('config ' ),
223
+ new VariableNode ('instantiator ' ),
224
+ new VariableNode ('providers ' , byReference: true ),
225
+ ]),
207
226
),
208
227
)),
209
228
...$ propertyValueProvidersNodes ,
@@ -236,15 +255,15 @@ protected function scalarNodes(ScalarNode $node, array &$context): array
236
255
}
237
256
238
257
$ formatDataNodes = match (true ) {
239
- \in_array ($ node ->type ->name (), ['int ' , 'string ' , 'float ' , 'bool ' , 'object ' ], true ) => [
258
+ \in_array ($ node ->type ->name (), ['int ' , 'string ' , 'float ' , 'bool ' , 'object ' , ' array ' ], true ) => [
240
259
new TryCatchNode ([new ExpressionNode (new ReturnNode (new CastNode ($ node ->type ->name (), new VariableNode ('data ' ))))], [
241
260
new ExpressionNode (new ThrowNode (new NewNode ('\\' .UnexpectedValueException::class, new ArgumentsNode ([
242
261
new FunctionCallNode ('sprintf ' , new ArgumentsNode ([
243
262
new PhpScalarNode (sprintf ('Cannot cast "%%s" to "%s" ' , $ node ->type ->name ())),
244
263
new FunctionCallNode ('get_debug_type ' , new ArgumentsNode ([new VariableNode ('data ' )])),
245
264
])),
246
265
])))),
247
- ], new ArgumentsNode (['e ' => '\\Throwable ' ])),
266
+ ], new ParametersNode (['e ' => '\\Throwable ' ])),
248
267
],
249
268
$ node ->type ->isEnum () => [
250
269
new TryCatchNode ([
@@ -255,13 +274,13 @@ protected function scalarNodes(ScalarNode $node, array &$context): array
255
274
static: true ,
256
275
))),
257
276
], [
258
- new ExpressionNode (new ThrowNode (new NewNode ('\\' .UnexpectedValueException::class, new ArgumentsNode ([
259
- new FunctionCallNode ('sprintf ' , new ArgumentsNode ([
260
- new PhpScalarNode (sprintf ('Unexpected "%%s" value for "%s" backed enumeration. ' , $ node ->type )),
261
- new VariableNode ('data ' ),
262
- ])),
263
- ])))),
264
- ], new ArgumentsNode (['e ' => '\\ValueError ' ])),
277
+ new ExpressionNode (new ThrowNode (new NewNode ('\\' .UnexpectedValueException::class, new ArgumentsNode ([
278
+ new FunctionCallNode ('sprintf ' , new ArgumentsNode ([
279
+ new PhpScalarNode (sprintf ('Unexpected "%%s" value for "%s" backed enumeration. ' , $ node ->type )),
280
+ new VariableNode ('data ' ),
281
+ ])),
282
+ ])))),
283
+ ], new ParametersNode (['e ' => '\\ValueError ' ])),
265
284
],
266
285
default => [
267
286
new ExpressionNode (new ReturnNode (new VariableNode ('data ' ))),
@@ -272,11 +291,15 @@ protected function scalarNodes(ScalarNode $node, array &$context): array
272
291
new ExpressionNode (new AssignNode (
273
292
new ArrayAccessNode (new VariableNode ('providers ' ), new PhpScalarNode ($ node ->identifier ())),
274
293
new ClosureNode (
275
- new ArgumentsNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
276
- ( string ) $ node -> type ,
294
+ new ParametersNode (['resource ' => 'mixed ' , 'offset ' => 'int ' , 'length ' => 'int ' ]),
295
+ ' mixed ' ,
277
296
true ,
278
297
[...$ getDataNodes , ...$ formatDataNodes ],
279
- new ArgumentsNode (['config ' => null , 'instantiator ' => null , '&providers ' => null ]),
298
+ new ArgumentsNode ([
299
+ new VariableNode ('config ' ),
300
+ new VariableNode ('instantiator ' ),
301
+ new VariableNode ('providers ' , byReference: true ),
302
+ ]),
280
303
),
281
304
)),
282
305
];
0 commit comments