Passed
Pull Request — master (#772)
by Aleksei
06:58
created
src/Attributes/src/Internal/Instantiator/NamedArgumentsInstantiator.php 1 patch
Braces   +52 added lines, -23 removed lines patch added patch discarded remove patch
@@ -49,17 +49,22 @@  discard block
 block discarded – undo
49 49
      */
50 50
     public function instantiate(\ReflectionClass $attr, array $arguments, \Reflector $context = null): object
51 51
     {
52
-        if ($this->isNamedArgumentsSupported()) {
53
-            try {
52
+        if ($this->isNamedArgumentsSupported())
53
+        {
54
+            try
55
+            {
54 56
                 return $attr->newInstanceArgs($arguments);
55
-            } catch (\Throwable $e) {
57
+            }
58
+            catch (\Throwable $e)
59
+            {
56 60
                 throw Exception::withLocation($e, $attr->getFileName(), $attr->getStartLine());
57 61
             }
58 62
         }
59 63
 
60 64
         $constructor = $this->getConstructor($attr);
61 65
 
62
-        if ($constructor === null) {
66
+        if ($constructor === null)
67
+        {
63 68
             return $attr->newInstanceWithoutConstructor();
64 69
         }
65 70
 
@@ -78,9 +83,12 @@  discard block
 block discarded – undo
78 83
      */
79 84
     private function resolveParameters(\ReflectionClass $ctx, \ReflectionMethod $constructor, array $arguments): array
80 85
     {
81
-        try {
86
+        try
87
+        {
82 88
             return $this->doResolveParameters($ctx, $constructor, $arguments);
83
-        } catch (\Throwable $e) {
89
+        }
90
+        catch (\Throwable $e)
91
+        {
84 92
             throw Exception::withLocation($e, $constructor->getFileName(), $constructor->getStartLine());
85 93
         }
86 94
     }
@@ -92,16 +100,20 @@  discard block
 block discarded – undo
92 100
     {
93 101
         $namedArgsBegin = $this->analyzeKeys($arguments);
94 102
 
95
-        if ($namedArgsBegin === null) {
103
+        if ($namedArgsBegin === null)
104
+        {
96 105
             // Only numeric / positional keys exist.
97 106
             return $arguments;
98 107
         }
99 108
 
100
-        if ($namedArgsBegin === 0) {
109
+        if ($namedArgsBegin === 0)
110
+        {
101 111
             // Only named keys exist.
102 112
             $passed = [];
103 113
             $named = $arguments;
104
-        } else {
114
+        }
115
+        else
116
+        {
105 117
             // Numeric/positional keys followed by named keys.
106 118
             // No need to preserve numeric keys.
107 119
             $passed = array_slice($arguments, 0, $namedArgsBegin);
@@ -135,11 +147,14 @@  discard block
 block discarded – undo
135 147
         $arguments = \array_merge($arguments);
136 148
 
137 149
         $i = 0;
138
-        foreach ($arguments as $k => $_) {
139
-            if ($k !== $i) {
150
+        foreach ($arguments as $k => $_)
151
+        {
152
+            if ($k !== $i)
153
+            {
140 154
                 // This must be a string key.
141 155
                 // Any further numeric keys are illegal.
142
-                if (\array_key_exists($i, $arguments)) {
156
+                if (\array_key_exists($i, $arguments))
157
+                {
143 158
                     throw new \BadMethodCallException(self::ERROR_POSITIONAL_AFTER_NAMED);
144 159
                 }
145 160
                 return $i;
@@ -171,25 +186,34 @@  discard block
 block discarded – undo
171 186
     {
172 187
         // Analyze parameters.
173 188
         $n = count($parameters);
174
-        if ($n > 0 && end($parameters)->isVariadic()) {
189
+        if ($n > 0 && end($parameters)->isVariadic())
190
+        {
175 191
             $variadicParameter = end($parameters);
176 192
             // Don't include the variadic parameter in the mapping process.
177 193
             --$n;
178
-        } else {
194
+        }
195
+        else
196
+        {
179 197
             $variadicParameter = null;
180 198
         }
181 199
 
182 200
         // Process parameters that are not already filled with positional args.
183 201
         // This loop will do nothing if $namedArgsBegin >= $n. That's ok.
184
-        for ($i = $namedArgsBegin; $i < $n; ++$i) {
202
+        for ($i = $namedArgsBegin; $i < $n; ++$i)
203
+        {
185 204
             $parameter = $parameters[$i];
186 205
             $k = $parameter->getName();
187
-            if (array_key_exists($k, $named)) {
206
+            if (array_key_exists($k, $named))
207
+            {
188 208
                 $passed[] = $named[$k];
189 209
                 unset($named[$k]);
190
-            } elseif ($parameter->isDefaultValueAvailable()) {
210
+            }
211
+            elseif ($parameter->isDefaultValueAvailable())
212
+            {
191 213
                 $passed[] = $parameter->getDefaultValue();
192
-            } else {
214
+            }
215
+            else
216
+            {
193 217
                 $message = \vsprintf(self::ERROR_ARGUMENT_NOT_PASSED, [
194 218
                     $ctx->getName(),
195 219
                     $parameter->getPosition() + 1,
@@ -200,7 +224,8 @@  discard block
 block discarded – undo
200 224
             }
201 225
         }
202 226
 
203
-        if ($named === []) {
227
+        if ($named === [])
228
+        {
204 229
             // No unknown argument names exist.
205 230
             return $passed;
206 231
         }
@@ -210,11 +235,14 @@  discard block
 block discarded – undo
210 235
         $badArgName = key($named);
211 236
 
212 237
         // Check collision with positional arguments.
213
-        foreach ($parameters as $i => $parameter) {
214
-            if ($i >= $namedArgsBegin) {
238
+        foreach ($parameters as $i => $parameter)
239
+        {
240
+            if ($i >= $namedArgsBegin)
241
+            {
215 242
                 break;
216 243
             }
217
-            if ($parameter->getName() === $badArgName) {
244
+            if ($parameter->getName() === $badArgName)
245
+            {
218 246
                 // The named argument overwrites a positional argument.
219 247
                 $message = \sprintf(self::ERROR_OVERWRITE_ARGUMENT, $badArgName);
220 248
                 throw new \BadMethodCallException($message);
@@ -222,7 +250,8 @@  discard block
 block discarded – undo
222 250
         }
223 251
 
224 252
         // Special handling if a variadic parameter is present.
225
-        if ($variadicParameter !== null) {
253
+        if ($variadicParameter !== null)
254
+        {
226 255
             // The last parameter is variadic.
227 256
             // Since PHP 8+, variadic parameters can consume named arguments.
228 257
             // However, this code only runs if PHP < 8.
Please login to merge, or discard this patch.