@@ -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,14 @@ 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 !== null
271
+ && $ closureBindToVar instanceof Node \Expr \Variable
272
+ && is_string ($ closureBindToVar ->name )
273
+ ) {
274
+ $ varType = $ scope ->getType ($ closureBindToVar );
275
+ if ((new ObjectType (Closure::class))->isSuperTypeOf ($ varType )->yes ()) {
320
276
$ inFunction = $ scope ->getFunction ();
321
277
if ($ inFunction !== null ) {
322
278
$ closureThisParameters = [];
@@ -326,23 +282,23 @@ public static function selectFromArgs(
326
282
}
327
283
$ closureThisParameters [$ parameter ->getName ()] = $ parameter ->getClosureThisType ();
328
284
}
329
- if (array_key_exists ($ closureVarName , $ closureThisParameters )) {
330
- if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureVarName ))->yes ()) {
285
+ if (array_key_exists ($ closureBindToVar -> name , $ closureThisParameters )) {
286
+ if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureBindToVar -> name ))->yes ()) {
331
287
$ acceptor = $ parametersAcceptors [0 ];
332
288
$ 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 (),
289
+ $ parameters [0 ] = new NativeParameterReflection (
290
+ $ parameters [0 ]->getName (),
291
+ $ parameters [0 ]->isOptional (),
292
+ $ closureThisParameters [$ closureBindToVar -> name ],
293
+ $ parameters [0 ]->passedByReference (),
294
+ $ parameters [0 ]->isVariadic (),
295
+ $ parameters [0 ]->getDefaultValue (),
340
296
);
341
297
$ parametersAcceptors = [
342
298
new FunctionVariant (
343
299
$ acceptor ->getTemplateTypeMap (),
344
300
$ acceptor ->getResolvedTemplateTypeMap (),
345
- array_values ( $ parameters) ,
301
+ $ parameters ,
346
302
$ acceptor ->isVariadic (),
347
303
$ acceptor ->getReturnType (),
348
304
$ acceptor instanceof ExtendedParametersAcceptor ? $ acceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
@@ -353,6 +309,48 @@ public static function selectFromArgs(
353
309
}
354
310
}
355
311
}
312
+
313
+ if (
314
+ $ args [0 ]->getAttribute (ClosureBindArgVisitor::ATTRIBUTE_NAME ) !== null
315
+ && $ args [0 ]->value instanceof Node \Expr \Variable
316
+ && is_string ($ args [0 ]->value ->name )
317
+ ) {
318
+ $ closureVarName = $ args [0 ]->value ->name ;
319
+ $ inFunction = $ scope ->getFunction ();
320
+ if ($ inFunction !== null ) {
321
+ $ closureThisParameters = [];
322
+ foreach ($ inFunction ->getParameters () as $ parameter ) {
323
+ if ($ parameter ->getClosureThisType () === null ) {
324
+ continue ;
325
+ }
326
+ $ closureThisParameters [$ parameter ->getName ()] = $ parameter ->getClosureThisType ();
327
+ }
328
+ if (array_key_exists ($ closureVarName , $ closureThisParameters )) {
329
+ if ($ scope ->hasExpressionType (new ParameterVariableOriginalValueExpr ($ closureVarName ))->yes ()) {
330
+ $ acceptor = $ parametersAcceptors [0 ];
331
+ $ parameters = $ acceptor ->getParameters ();
332
+ $ parameters [1 ] = new NativeParameterReflection (
333
+ $ parameters [1 ]->getName (),
334
+ $ parameters [1 ]->isOptional (),
335
+ $ closureThisParameters [$ closureVarName ],
336
+ $ parameters [1 ]->passedByReference (),
337
+ $ parameters [1 ]->isVariadic (),
338
+ $ parameters [1 ]->getDefaultValue (),
339
+ );
340
+ $ parametersAcceptors = [
341
+ new FunctionVariant (
342
+ $ acceptor ->getTemplateTypeMap (),
343
+ $ acceptor ->getResolvedTemplateTypeMap (),
344
+ array_values ($ parameters ),
345
+ $ acceptor ->isVariadic (),
346
+ $ acceptor ->getReturnType (),
347
+ $ acceptor instanceof ExtendedParametersAcceptor ? $ acceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
348
+ ),
349
+ ];
350
+ }
351
+ }
352
+ }
353
+ }
356
354
}
357
355
358
356
if (count ($ parametersAcceptors ) === 1 ) {
0 commit comments