Skip to content

Commit 3e015ef

Browse files
committed
Check callable parameter type for array_map() and array_filter()
1 parent db4db5b commit 3e015ef

File tree

2 files changed

+1
-48
lines changed

2 files changed

+1
-48
lines changed

src/Analyser/NodeScopeResolver.php

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
use PHPStan\BetterReflection\Reflector\ClassReflector;
5151
use PHPStan\BetterReflection\SourceLocator\Ast\Strategy\NodeToReflection;
5252
use PHPStan\BetterReflection\SourceLocator\Located\LocatedSource;
53-
use PHPStan\DependencyInjection\BleedingEdgeToggle;
5453
use PHPStan\DependencyInjection\Reflection\ClassReflectionExtensionRegistryProvider;
5554
use PHPStan\DependencyInjection\Type\DynamicThrowTypeExtensionProvider;
5655
use PHPStan\File\FileHelper;
@@ -91,14 +90,11 @@
9190
use PHPStan\Reflection\Native\NativeMethodReflection;
9291
use PHPStan\Reflection\ParametersAcceptor;
9392
use PHPStan\Reflection\ParametersAcceptorSelector;
94-
use PHPStan\Reflection\PassedByReference;
95-
use PHPStan\Reflection\Php\DummyParameter;
9693
use PHPStan\Reflection\Php\PhpMethodReflection;
9794
use PHPStan\Reflection\ReflectionProvider;
9895
use PHPStan\TrinaryLogic;
9996
use PHPStan\Type\Accessory\NonEmptyArrayType;
10097
use PHPStan\Type\ArrayType;
101-
use PHPStan\Type\CallableType;
10298
use PHPStan\Type\ClosureType;
10399
use PHPStan\Type\Constant\ConstantArrayType;
104100
use PHPStan\Type\Constant\ConstantArrayTypeBuilder;
@@ -3157,47 +3153,6 @@ private function processArgs(
31573153
$scope = $scope->assignVariable($argValue->name, new MixedType());
31583154
}
31593155
}
3160-
3161-
if (!BleedingEdgeToggle::isBleedingEdge() && $calleeReflection instanceof FunctionReflection) {
3162-
if (
3163-
$i === 0
3164-
&& $calleeReflection->getName() === 'array_map'
3165-
&& isset($args[1])
3166-
) {
3167-
$parameterType = new CallableType([
3168-
new DummyParameter('item', $scope->getType($args[1]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3169-
], new MixedType(), false);
3170-
}
3171-
3172-
if (
3173-
$i === 1
3174-
&& $calleeReflection->getName() === 'array_filter'
3175-
&& isset($args[0])
3176-
) {
3177-
if (isset($args[2])) {
3178-
$mode = $scope->getType($args[2]->value);
3179-
if ($mode instanceof ConstantIntegerType) {
3180-
if ($mode->getValue() === ARRAY_FILTER_USE_KEY) {
3181-
$arrayFilterParameters = [
3182-
new DummyParameter('key', $scope->getType($args[0]->value)->getIterableKeyType(), false, PassedByReference::createNo(), false, null),
3183-
];
3184-
} elseif ($mode->getValue() === ARRAY_FILTER_USE_BOTH) {
3185-
$arrayFilterParameters = [
3186-
new DummyParameter('item', $scope->getType($args[0]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3187-
new DummyParameter('key', $scope->getType($args[0]->value)->getIterableKeyType(), false, PassedByReference::createNo(), false, null),
3188-
];
3189-
}
3190-
}
3191-
}
3192-
$parameterType = new CallableType(
3193-
$arrayFilterParameters ?? [
3194-
new DummyParameter('item', $scope->getType($args[0]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3195-
],
3196-
new MixedType(),
3197-
false
3198-
);
3199-
}
3200-
}
32013156
}
32023157

32033158
$originalScope = $scope;

src/Reflection/ParametersAcceptorSelector.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PhpParser\Node\Expr\FuncCall;
66
use PhpParser\Node\Name;
77
use PHPStan\Analyser\Scope;
8-
use PHPStan\DependencyInjection\BleedingEdgeToggle;
98
use PHPStan\Reflection\Native\NativeParameterReflection;
109
use PHPStan\Reflection\Php\DummyParameter;
1110
use PHPStan\TrinaryLogic;
@@ -50,8 +49,7 @@ public static function selectFromArgs(
5049
$types = [];
5150
$unpack = false;
5251
if (
53-
BleedingEdgeToggle::isBleedingEdge()
54-
&& count($args) > 0
52+
count($args) > 0
5553
&& count($parametersAcceptors) > 0
5654
) {
5755
$functionName = null;

0 commit comments

Comments
 (0)