@@ -155,7 +155,7 @@ public static function selectFromArgs(
155
155
}
156
156
}
157
157
158
- if (isset ( $ args [ 0 ]) && (bool ) $ args [0 ]->getAttribute (ArrayFilterArgVisitor::ATTRIBUTE_NAME )) {
158
+ if ((bool ) $ args [0 ]->getAttribute (ArrayFilterArgVisitor::ATTRIBUTE_NAME )) {
159
159
if (isset ($ args [2 ])) {
160
160
$ mode = $ scope ->getType ($ args [2 ]->value );
161
161
if ($ mode instanceof ConstantIntegerType) {
@@ -203,7 +203,7 @@ public static function selectFromArgs(
203
203
];
204
204
}
205
205
206
- if (isset ( $ args [ 0 ]) && (bool ) $ args [0 ]->getAttribute (ArrayWalkArgVisitor::ATTRIBUTE_NAME )) {
206
+ if ((bool ) $ args [0 ]->getAttribute (ArrayWalkArgVisitor::ATTRIBUTE_NAME )) {
207
207
$ arrayWalkParameters = [
208
208
new DummyParameter ('item ' , $ scope ->getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createReadsArgument (), false , null ),
209
209
new DummyParameter ('key ' , $ scope ->getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
@@ -234,7 +234,7 @@ public static function selectFromArgs(
234
234
];
235
235
}
236
236
237
- if (isset ( $ args [ 0 ]) && (bool ) $ args [0 ]->getAttribute (ArrayFindArgVisitor::ATTRIBUTE_NAME )) {
237
+ if ((bool ) $ args [0 ]->getAttribute (ArrayFindArgVisitor::ATTRIBUTE_NAME )) {
238
238
$ acceptor = $ parametersAcceptors [0 ];
239
239
$ parameters = $ acceptor ->getParameters ();
240
240
$ argType = $ scope ->getType ($ args [0 ]->value );
@@ -265,58 +265,13 @@ public static function selectFromArgs(
265
265
];
266
266
}
267
267
268
- if (isset ($ args [0 ])) {
269
- $ closureBindToVar = $ args [0 ]->getAttribute (ClosureBindToVarVisitor::ATTRIBUTE_NAME );
270
- if (
271
- $ closureBindToVar !== null
272
- && $ closureBindToVar instanceof Node \Expr \Variable
273
- && is_string ($ closureBindToVar ->name )
274
- ) {
275
- $ varType = $ scope ->getType ($ closureBindToVar );
276
- if ((new ObjectType (Closure::class))->isSuperTypeOf ($ varType )->yes ()) {
277
- $ inFunction = $ scope ->getFunction ();
278
- if ($ inFunction !== null ) {
279
- $ closureThisParameters = [];
280
- foreach ($ inFunction ->getParameters () as $ parameter ) {
281
- if ($ parameter ->getClosureThisType () === null ) {
282
- continue ;
283
- }
284
- $ closureThisParameters [$ parameter ->getName ()] = $ parameter ->getClosureThisType ();
285
- }
286
- if (array_key_exists ($ closureBindToVar ->name , $ closureThisParameters )) {
287
- if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureBindToVar ->name ))->yes ()) {
288
- $ acceptor = $ parametersAcceptors [0 ];
289
- $ parameters = $ acceptor ->getParameters ();
290
- $ parameters [0 ] = new NativeParameterReflection (
291
- $ parameters [0 ]->getName (),
292
- $ parameters [0 ]->isOptional (),
293
- $ closureThisParameters [$ closureBindToVar ->name ],
294
- $ parameters [0 ]->passedByReference (),
295
- $ parameters [0 ]->isVariadic (),
296
- $ parameters [0 ]->getDefaultValue (),
297
- );
298
- $ parametersAcceptors = [
299
- new FunctionVariant (
300
- $ acceptor ->getTemplateTypeMap (),
301
- $ acceptor ->getResolvedTemplateTypeMap (),
302
- $ parameters ,
303
- $ acceptor ->isVariadic (),
304
- $ acceptor ->getReturnType (),
305
- $ acceptor instanceof ExtendedParametersAcceptor ? $ acceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
306
- ),
307
- ];
308
- }
309
- }
310
- }
311
- }
312
- }
313
-
314
- if (
315
- $ args [0 ]->getAttribute (ClosureBindArgVisitor::ATTRIBUTE_NAME ) !== null
316
- && $ args [0 ]->value instanceof Node \Expr \Variable
317
- && is_string ($ args [0 ]->value ->name )
318
- ) {
319
- $ closureVarName = $ args [0 ]->value ->name ;
268
+ $ closureBindToVar = $ args [0 ]->getAttribute (ClosureBindToVarVisitor::ATTRIBUTE_NAME );
269
+ if (
270
+ $ closureBindToVar instanceof Node \Expr \Variable
271
+ && is_string ($ closureBindToVar ->name )
272
+ ) {
273
+ $ varType = $ scope ->getType ($ closureBindToVar );
274
+ if ((new ObjectType (Closure::class))->isSuperTypeOf ($ varType )->yes ()) {
320
275
$ inFunction = $ scope ->getFunction ();
321
276
if ($ inFunction !== null ) {
322
277
$ closureThisParameters = [];
@@ -326,23 +281,23 @@ public static function selectFromArgs(
326
281
}
327
282
$ closureThisParameters [$ parameter ->getName ()] = $ parameter ->getClosureThisType ();
328
283
}
329
- if (array_key_exists ($ closureVarName , $ closureThisParameters )) {
330
- if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureVarName ))->yes ()) {
284
+ if (array_key_exists ($ closureBindToVar -> name , $ closureThisParameters )) {
285
+ if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureBindToVar -> name ))->yes ()) {
331
286
$ acceptor = $ parametersAcceptors [0 ];
332
287
$ parameters = $ acceptor ->getParameters ();
333
- $ parameters [1 ] = new NativeParameterReflection (
334
- $ parameters [1 ]->getName (),
335
- $ parameters [1 ]->isOptional (),
336
- $ closureThisParameters [$ closureVarName ],
337
- $ parameters [1 ]->passedByReference (),
338
- $ parameters [1 ]->isVariadic (),
339
- $ parameters [1 ]->getDefaultValue (),
288
+ $ parameters [0 ] = new NativeParameterReflection (
289
+ $ parameters [0 ]->getName (),
290
+ $ parameters [0 ]->isOptional (),
291
+ $ closureThisParameters [$ closureBindToVar -> name ],
292
+ $ parameters [0 ]->passedByReference (),
293
+ $ parameters [0 ]->isVariadic (),
294
+ $ parameters [0 ]->getDefaultValue (),
340
295
);
341
296
$ parametersAcceptors = [
342
297
new FunctionVariant (
343
298
$ acceptor ->getTemplateTypeMap (),
344
299
$ acceptor ->getResolvedTemplateTypeMap (),
345
- array_values ( $ parameters) ,
300
+ $ parameters ,
346
301
$ acceptor ->isVariadic (),
347
302
$ acceptor ->getReturnType (),
348
303
$ acceptor instanceof ExtendedParametersAcceptor ? $ acceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
@@ -353,6 +308,48 @@ public static function selectFromArgs(
353
308
}
354
309
}
355
310
}
311
+
312
+ if (
313
+ $ args [0 ]->getAttribute (ClosureBindArgVisitor::ATTRIBUTE_NAME ) !== null
314
+ && $ args [0 ]->value instanceof Node \Expr \Variable
315
+ && is_string ($ args [0 ]->value ->name )
316
+ ) {
317
+ $ closureVarName = $ args [0 ]->value ->name ;
318
+ $ inFunction = $ scope ->getFunction ();
319
+ if ($ inFunction !== null ) {
320
+ $ closureThisParameters = [];
321
+ foreach ($ inFunction ->getParameters () as $ parameter ) {
322
+ if ($ parameter ->getClosureThisType () === null ) {
323
+ continue ;
324
+ }
325
+ $ closureThisParameters [$ parameter ->getName ()] = $ parameter ->getClosureThisType ();
326
+ }
327
+ if (array_key_exists ($ closureVarName , $ closureThisParameters )) {
328
+ if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureVarName ))->yes ()) {
329
+ $ acceptor = $ parametersAcceptors [0 ];
330
+ $ parameters = $ acceptor ->getParameters ();
331
+ $ parameters [1 ] = new NativeParameterReflection (
332
+ $ parameters [1 ]->getName (),
333
+ $ parameters [1 ]->isOptional (),
334
+ $ closureThisParameters [$ closureVarName ],
335
+ $ parameters [1 ]->passedByReference (),
336
+ $ parameters [1 ]->isVariadic (),
337
+ $ parameters [1 ]->getDefaultValue (),
338
+ );
339
+ $ parametersAcceptors = [
340
+ new FunctionVariant (
341
+ $ acceptor ->getTemplateTypeMap (),
342
+ $ acceptor ->getResolvedTemplateTypeMap (),
343
+ array_values ($ parameters ),
344
+ $ acceptor ->isVariadic (),
345
+ $ acceptor ->getReturnType (),
346
+ $ acceptor instanceof ExtendedParametersAcceptor ? $ acceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
347
+ ),
348
+ ];
349
+ }
350
+ }
351
+ }
352
+ }
356
353
}
357
354
358
355
if (count ($ parametersAcceptors ) === 1 ) {
0 commit comments