|
15 | 15 |
|
16 | 16 | use ArrayIterator; |
17 | 17 | use InvalidArgumentException; |
| 18 | +use phpDocumentor\Reflection\PseudoTypes\CallableString; |
| 19 | +use phpDocumentor\Reflection\PseudoTypes\False_; |
| 20 | +use phpDocumentor\Reflection\PseudoTypes\HtmlEscapedString; |
18 | 21 | use phpDocumentor\Reflection\PseudoTypes\IntegerRange; |
19 | 22 | use phpDocumentor\Reflection\PseudoTypes\List_; |
| 23 | +use phpDocumentor\Reflection\PseudoTypes\LiteralString; |
| 24 | +use phpDocumentor\Reflection\PseudoTypes\LowercaseString; |
| 25 | +use phpDocumentor\Reflection\PseudoTypes\NegativeInteger; |
| 26 | +use phpDocumentor\Reflection\PseudoTypes\NonEmptyLowercaseString; |
| 27 | +use phpDocumentor\Reflection\PseudoTypes\NonEmptyString; |
| 28 | +use phpDocumentor\Reflection\PseudoTypes\Numeric_; |
| 29 | +use phpDocumentor\Reflection\PseudoTypes\NumericString; |
| 30 | +use phpDocumentor\Reflection\PseudoTypes\PositiveInteger; |
| 31 | +use phpDocumentor\Reflection\PseudoTypes\TraitString; |
| 32 | +use phpDocumentor\Reflection\PseudoTypes\True_; |
20 | 33 | use phpDocumentor\Reflection\Types\Array_; |
21 | 34 | use phpDocumentor\Reflection\Types\ArrayKey; |
| 35 | +use phpDocumentor\Reflection\Types\Boolean; |
| 36 | +use phpDocumentor\Reflection\Types\Callable_; |
22 | 37 | use phpDocumentor\Reflection\Types\ClassString; |
23 | 38 | use phpDocumentor\Reflection\Types\Collection; |
24 | 39 | use phpDocumentor\Reflection\Types\Compound; |
25 | 40 | use phpDocumentor\Reflection\Types\Context; |
26 | 41 | use phpDocumentor\Reflection\Types\Expression; |
| 42 | +use phpDocumentor\Reflection\Types\Float_; |
27 | 43 | use phpDocumentor\Reflection\Types\Integer; |
28 | 44 | use phpDocumentor\Reflection\Types\InterfaceString; |
29 | 45 | use phpDocumentor\Reflection\Types\Intersection; |
30 | 46 | use phpDocumentor\Reflection\Types\Iterable_; |
| 47 | +use phpDocumentor\Reflection\Types\Mixed_; |
| 48 | +use phpDocumentor\Reflection\Types\Never_; |
| 49 | +use phpDocumentor\Reflection\Types\Null_; |
31 | 50 | use phpDocumentor\Reflection\Types\Nullable; |
32 | 51 | use phpDocumentor\Reflection\Types\Object_; |
| 52 | +use phpDocumentor\Reflection\Types\Parent_; |
| 53 | +use phpDocumentor\Reflection\Types\Resource_; |
| 54 | +use phpDocumentor\Reflection\Types\Scalar; |
| 55 | +use phpDocumentor\Reflection\Types\Self_; |
| 56 | +use phpDocumentor\Reflection\Types\Static_; |
33 | 57 | use phpDocumentor\Reflection\Types\String_; |
| 58 | +use phpDocumentor\Reflection\Types\This; |
| 59 | +use phpDocumentor\Reflection\Types\Void_; |
34 | 60 | use RuntimeException; |
35 | 61 |
|
36 | 62 | use function array_key_exists; |
| 63 | +use function array_key_last; |
37 | 64 | use function array_pop; |
38 | 65 | use function array_values; |
39 | 66 | use function class_exists; |
40 | 67 | use function class_implements; |
41 | 68 | use function count; |
42 | 69 | use function current; |
43 | | -use function end; |
44 | 70 | use function in_array; |
45 | 71 | use function is_numeric; |
46 | | -use function key; |
47 | 72 | use function preg_split; |
48 | 73 | use function strpos; |
49 | 74 | use function strtolower; |
@@ -76,54 +101,51 @@ final class TypeResolver |
76 | 101 | * @var array<string, string> List of recognized keywords and unto which Value Object they map |
77 | 102 | * @psalm-var array<string, class-string<Type>> |
78 | 103 | */ |
79 | | - private $keywords = [ |
80 | | - 'string' => Types\String_::class, |
81 | | - 'class-string' => Types\ClassString::class, |
82 | | - 'interface-string' => Types\InterfaceString::class, |
83 | | - 'html-escaped-string' => PseudoTypes\HtmlEscapedString::class, |
84 | | - 'lowercase-string' => PseudoTypes\LowercaseString::class, |
85 | | - 'non-empty-lowercase-string' => PseudoTypes\NonEmptyLowercaseString::class, |
86 | | - 'non-empty-string' => PseudoTypes\NonEmptyString::class, |
87 | | - 'numeric-string' => PseudoTypes\NumericString::class, |
88 | | - 'numeric' => PseudoTypes\Numeric_::class, |
89 | | - 'trait-string' => PseudoTypes\TraitString::class, |
90 | | - 'int' => Types\Integer::class, |
91 | | - 'integer' => Types\Integer::class, |
92 | | - 'positive-int' => PseudoTypes\PositiveInteger::class, |
93 | | - 'negative-int' => PseudoTypes\NegativeInteger::class, |
94 | | - 'bool' => Types\Boolean::class, |
95 | | - 'boolean' => Types\Boolean::class, |
96 | | - 'real' => Types\Float_::class, |
97 | | - 'float' => Types\Float_::class, |
98 | | - 'double' => Types\Float_::class, |
99 | | - 'object' => Types\Object_::class, |
100 | | - 'mixed' => Types\Mixed_::class, |
101 | | - 'array' => Types\Array_::class, |
102 | | - 'array-key' => Types\ArrayKey::class, |
103 | | - 'resource' => Types\Resource_::class, |
104 | | - 'void' => Types\Void_::class, |
105 | | - 'null' => Types\Null_::class, |
106 | | - 'scalar' => Types\Scalar::class, |
107 | | - 'callback' => Types\Callable_::class, |
108 | | - 'callable' => Types\Callable_::class, |
109 | | - 'callable-string' => PseudoTypes\CallableString::class, |
110 | | - 'false' => PseudoTypes\False_::class, |
111 | | - 'true' => PseudoTypes\True_::class, |
112 | | - 'literal-string' => PseudoTypes\LiteralString::class, |
113 | | - 'self' => Types\Self_::class, |
114 | | - '$this' => Types\This::class, |
115 | | - 'static' => Types\Static_::class, |
116 | | - 'parent' => Types\Parent_::class, |
117 | | - 'iterable' => Types\Iterable_::class, |
118 | | - 'never' => Types\Never_::class, |
119 | | - 'list' => PseudoTypes\List_::class, |
| 104 | + private array $keywords = [ |
| 105 | + 'string' => String_::class, |
| 106 | + 'class-string' => ClassString::class, |
| 107 | + 'interface-string' => InterfaceString::class, |
| 108 | + 'html-escaped-string' => HtmlEscapedString::class, |
| 109 | + 'lowercase-string' => LowercaseString::class, |
| 110 | + 'non-empty-lowercase-string' => NonEmptyLowercaseString::class, |
| 111 | + 'non-empty-string' => NonEmptyString::class, |
| 112 | + 'numeric-string' => NumericString::class, |
| 113 | + 'numeric' => Numeric_::class, |
| 114 | + 'trait-string' => TraitString::class, |
| 115 | + 'int' => Integer::class, |
| 116 | + 'integer' => Integer::class, |
| 117 | + 'positive-int' => PositiveInteger::class, |
| 118 | + 'negative-int' => NegativeInteger::class, |
| 119 | + 'bool' => Boolean::class, |
| 120 | + 'boolean' => Boolean::class, |
| 121 | + 'real' => Float_::class, |
| 122 | + 'float' => Float_::class, |
| 123 | + 'double' => Float_::class, |
| 124 | + 'object' => Object_::class, |
| 125 | + 'mixed' => Mixed_::class, |
| 126 | + 'array' => Array_::class, |
| 127 | + 'array-key' => ArrayKey::class, |
| 128 | + 'resource' => Resource_::class, |
| 129 | + 'void' => Void_::class, |
| 130 | + 'null' => Null_::class, |
| 131 | + 'scalar' => Scalar::class, |
| 132 | + 'callback' => Callable_::class, |
| 133 | + 'callable' => Callable_::class, |
| 134 | + 'callable-string' => CallableString::class, |
| 135 | + 'false' => False_::class, |
| 136 | + 'true' => True_::class, |
| 137 | + 'literal-string' => LiteralString::class, |
| 138 | + 'self' => Self_::class, |
| 139 | + '$this' => This::class, |
| 140 | + 'static' => Static_::class, |
| 141 | + 'parent' => Parent_::class, |
| 142 | + 'iterable' => Iterable_::class, |
| 143 | + 'never' => Never_::class, |
| 144 | + 'list' => List_::class, |
120 | 145 | ]; |
121 | 146 |
|
122 | | - /** |
123 | | - * @var FqsenResolver |
124 | | - * @psalm-readonly |
125 | | - */ |
126 | | - private $fqsenResolver; |
| 147 | + /** @psalm-readonly */ |
| 148 | + private FqsenResolver $fqsenResolver; |
127 | 149 |
|
128 | 150 | /** |
129 | 151 | * Initializes this TypeResolver with the means to create and resolve Fqsen objects. |
@@ -280,8 +302,7 @@ private function parseTypes(ArrayIterator $tokens, Context $context, int $parser |
280 | 302 | ) { |
281 | 303 | break; |
282 | 304 | } elseif ($token === self::OPERATOR_ARRAY) { |
283 | | - end($types); |
284 | | - $last = key($types); |
| 305 | + $last = array_key_last($types); |
285 | 306 | if ($last === null) { |
286 | 307 | throw new InvalidArgumentException('Unexpected array operator'); |
287 | 308 | } |
|
0 commit comments