|
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