|
10 | 10 | use PHPStan\Symfony\ParameterMap;
|
11 | 11 | use PHPStan\Type\ArrayType;
|
12 | 12 | use PHPStan\Type\BooleanType;
|
| 13 | +use PHPStan\Type\Constant\ConstantArrayType; |
13 | 14 | use PHPStan\Type\Constant\ConstantBooleanType;
|
14 | 15 | use PHPStan\Type\DynamicMethodReturnTypeExtension;
|
15 | 16 | use PHPStan\Type\FloatType;
|
|
18 | 19 | use PHPStan\Type\NullType;
|
19 | 20 | use PHPStan\Type\StringType;
|
20 | 21 | use PHPStan\Type\Type;
|
21 |
| -use PHPStan\Type\TypeUtils; |
| 22 | +use PHPStan\Type\TypeTraverser; |
22 | 23 | use PHPStan\Type\UnionType;
|
23 | 24 | use function in_array;
|
24 | 25 |
|
@@ -98,7 +99,21 @@ private function getGetTypeFromMethodCall(
|
98 | 99 | if ($parameterKey !== null) {
|
99 | 100 | $parameter = $this->parameterMap->getParameter($parameterKey);
|
100 | 101 | if ($parameter !== null) {
|
101 |
| - return TypeUtils::generalizeType($scope->getTypeFromValue($parameter->getValue())); |
| 102 | + return TypeTraverser::map($scope->getTypeFromValue($parameter->getValue()), static function (\PHPStan\Type\Type $type, callable $traverse): Type { |
| 103 | + if ($type instanceof \PHPStan\Type\ConstantType) { |
| 104 | + $generalized = $type->generalize(); |
| 105 | + if ($generalized instanceof ConstantArrayType) { |
| 106 | + if (count($generalized->getValueTypes()) !== 0) { |
| 107 | + throw new \PHPStan\ShouldNotHappenException(); |
| 108 | + } |
| 109 | + |
| 110 | + return new ArrayType(new MixedType(), new MixedType()); |
| 111 | + } |
| 112 | + |
| 113 | + return $generalized; |
| 114 | + } |
| 115 | + return $traverse($type); |
| 116 | + }); |
102 | 117 | }
|
103 | 118 | }
|
104 | 119 |
|
|
0 commit comments