| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\HttpKernel\ControllerMetadata;
 
- /**
 
-  * Builds {@see ArgumentMetadata} objects based on the given Controller.
 
-  *
 
-  * @author Iltar van der Berg <kjarli@gmail.com>
 
-  */
 
- final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface
 
- {
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function createArgumentMetadata($controller): array
 
-     {
 
-         $arguments = [];
 
-         if (\is_array($controller)) {
 
-             $reflection = new \ReflectionMethod($controller[0], $controller[1]);
 
-             $class = $reflection->class;
 
-         } elseif (\is_object($controller) && !$controller instanceof \Closure) {
 
-             $reflection = new \ReflectionMethod($controller, '__invoke');
 
-             $class = $reflection->class;
 
-         } else {
 
-             $reflection = new \ReflectionFunction($controller);
 
-             if ($class = str_contains($reflection->name, '{closure}') ? null : (\PHP_VERSION_ID >= 80111 ? $reflection->getClosureCalledClass() : $reflection->getClosureScopeClass())) {
 
-                 $class = $class->name;
 
-             }
 
-         }
 
-         foreach ($reflection->getParameters() as $param) {
 
-             $attributes = [];
 
-             if (\PHP_VERSION_ID >= 80000) {
 
-                 foreach ($param->getAttributes() as $reflectionAttribute) {
 
-                     if (class_exists($reflectionAttribute->getName())) {
 
-                         $attributes[] = $reflectionAttribute->newInstance();
 
-                     }
 
-                 }
 
-             }
 
-             $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $class), $param->isVariadic(), $param->isDefaultValueAvailable(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null, $param->allowsNull(), $attributes);
 
-         }
 
-         return $arguments;
 
-     }
 
-     /**
 
-      * Returns an associated type to the given parameter if available.
 
-      */
 
-     private function getType(\ReflectionParameter $parameter, ?string $class): ?string
 
-     {
 
-         if (!$type = $parameter->getType()) {
 
-             return null;
 
-         }
 
-         $name = $type instanceof \ReflectionNamedType ? $type->getName() : (string) $type;
 
-         if (null !== $class) {
 
-             switch (strtolower($name)) {
 
-                 case 'self':
 
-                     return $class;
 
-                 case 'parent':
 
-                     return get_parent_class($class) ?: null;
 
-             }
 
-         }
 
-         return $name;
 
-     }
 
- }
 
 
  |