18
18
use PHPStan \Type \BooleanType ;
19
19
use PHPStan \Type \CallableType ;
20
20
use PHPStan \Type \Constant \ConstantIntegerType ;
21
- use PHPStan \Type \ErrorType ;
22
21
use PHPStan \Type \Generic \TemplateType ;
23
22
use PHPStan \Type \Generic \TemplateTypeMap ;
24
23
use PHPStan \Type \IntegerType ;
@@ -90,7 +89,7 @@ public static function selectFromArgs(
90
89
$ parameters = $ acceptor ->getParameters ();
91
90
$ callbackParameters = [];
92
91
foreach ($ arrayMapArgs as $ arg ) {
93
- $ callbackParameters [] = new DummyParameter ('item ' , self :: getIterableValueType ($ scope ->getType ($ arg ->value )), false , PassedByReference::createNo (), false , null );
92
+ $ callbackParameters [] = new DummyParameter ('item ' , $ scope -> getIterableValueType ($ scope ->getType ($ arg ->value )), false , PassedByReference::createNo (), false , null );
94
93
}
95
94
$ parameters [0 ] = new NativeParameterReflection (
96
95
$ parameters [0 ]->getName (),
@@ -151,12 +150,12 @@ public static function selectFromArgs(
151
150
if ($ mode instanceof ConstantIntegerType) {
152
151
if ($ mode ->getValue () === ARRAY_FILTER_USE_KEY ) {
153
152
$ arrayFilterParameters = [
154
- new DummyParameter ('key ' , self :: getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
153
+ new DummyParameter ('key ' , $ scope -> getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
155
154
];
156
155
} elseif ($ mode ->getValue () === ARRAY_FILTER_USE_BOTH ) {
157
156
$ arrayFilterParameters = [
158
- new DummyParameter ('item ' , self :: getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
159
- new DummyParameter ('key ' , self :: getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
157
+ new DummyParameter ('item ' , $ scope -> getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
158
+ new DummyParameter ('key ' , $ scope -> getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
160
159
];
161
160
}
162
161
}
@@ -169,7 +168,7 @@ public static function selectFromArgs(
169
168
$ parameters [1 ]->isOptional (),
170
169
new CallableType (
171
170
$ arrayFilterParameters ?? [
172
- new DummyParameter ('item ' , self :: getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
171
+ new DummyParameter ('item ' , $ scope -> getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
173
172
],
174
173
new MixedType (),
175
174
false ,
@@ -191,8 +190,8 @@ public static function selectFromArgs(
191
190
192
191
if (isset ($ args [0 ]) && (bool ) $ args [0 ]->getAttribute (ArrayWalkArgVisitor::ATTRIBUTE_NAME )) {
193
192
$ arrayWalkParameters = [
194
- new DummyParameter ('item ' , self :: getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createReadsArgument (), false , null ),
195
- new DummyParameter ('key ' , self :: getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
193
+ new DummyParameter ('item ' , $ scope -> getIterableValueType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createReadsArgument (), false , null ),
194
+ new DummyParameter ('key ' , $ scope -> getIterableKeyType ($ scope ->getType ($ args [0 ]->value )), false , PassedByReference::createNo (), false , null ),
196
195
];
197
196
if (isset ($ args [2 ])) {
198
197
$ arrayWalkParameters [] = new DummyParameter ('arg ' , $ scope ->getType ($ args [2 ]->value ), false , PassedByReference::createNo (), false , null );
@@ -548,44 +547,6 @@ private static function wrapParameter(ParameterReflection $parameter): Parameter
548
547
);
549
548
}
550
549
551
- private static function getIterableValueType (Type $ type ): Type
552
- {
553
- if ($ type instanceof UnionType) {
554
- $ types = [];
555
- foreach ($ type ->getTypes () as $ innerType ) {
556
- $ iterableValueType = $ innerType ->getIterableValueType ();
557
- if ($ iterableValueType instanceof ErrorType) {
558
- continue ;
559
- }
560
-
561
- $ types [] = $ iterableValueType ;
562
- }
563
-
564
- return TypeCombinator::union (...$ types );
565
- }
566
-
567
- return $ type ->getIterableValueType ();
568
- }
569
-
570
- private static function getIterableKeyType (Type $ type ): Type
571
- {
572
- if ($ type instanceof UnionType) {
573
- $ types = [];
574
- foreach ($ type ->getTypes () as $ innerType ) {
575
- $ iterableKeyType = $ innerType ->getIterableKeyType ();
576
- if ($ iterableKeyType instanceof ErrorType) {
577
- continue ;
578
- }
579
-
580
- $ types [] = $ iterableKeyType ;
581
- }
582
-
583
- return TypeCombinator::union (...$ types );
584
- }
585
-
586
- return $ type ->getIterableKeyType ();
587
- }
588
-
589
550
private static function getCurlOptValueType (int $ curlOpt ): ?Type
590
551
{
591
552
if (defined ('CURLOPT_SSL_VERIFYHOST ' ) && $ curlOpt === CURLOPT_SSL_VERIFYHOST ) {
0 commit comments