|
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