PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / vendor / prefixed / symfony / http-kernel / ControllerMetadata / ArgumentMetadataFactory.php
matomo / app / vendor / prefixed / symfony / http-kernel / ControllerMetadata Last commit date
ArgumentMetadata.php 1 year ago ArgumentMetadataFactory.php 2 years ago ArgumentMetadataFactoryInterface.php 2 years ago
ArgumentMetadataFactory.php
71 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace Matomo\Dependencies\Symfony\Component\HttpKernel\ControllerMetadata;
12
13 /**
14 * Builds {@see ArgumentMetadata} objects based on the given Controller.
15 *
16 * @author Iltar van der Berg <kjarli@gmail.com>
17 */
18 final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface
19 {
20 /**
21 * {@inheritdoc}
22 */
23 public function createArgumentMetadata($controller) : array
24 {
25 $arguments = [];
26 if (\is_array($controller)) {
27 $reflection = new \ReflectionMethod($controller[0], $controller[1]);
28 $class = $reflection->class;
29 } elseif (\is_object($controller) && !$controller instanceof \Closure) {
30 $reflection = new \ReflectionMethod($controller, '__invoke');
31 $class = $reflection->class;
32 } else {
33 $reflection = new \ReflectionFunction($controller);
34 if ($class = str_contains($reflection->name, '{closure') ? null : (\PHP_VERSION_ID >= 80111 ? $reflection->getClosureCalledClass() : $reflection->getClosureScopeClass())) {
35 $class = $class->name;
36 }
37 }
38 foreach ($reflection->getParameters() as $param) {
39 $attributes = [];
40 if (\PHP_VERSION_ID >= 80000) {
41 foreach ($param->getAttributes() as $reflectionAttribute) {
42 if (class_exists($reflectionAttribute->getName())) {
43 $attributes[] = $reflectionAttribute->newInstance();
44 }
45 }
46 }
47 $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $class), $param->isVariadic(), $param->isDefaultValueAvailable(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null, $param->allowsNull(), $attributes);
48 }
49 return $arguments;
50 }
51 /**
52 * Returns an associated type to the given parameter if available.
53 */
54 private function getType(\ReflectionParameter $parameter, ?string $class) : ?string
55 {
56 if (!($type = $parameter->getType())) {
57 return null;
58 }
59 $name = $type instanceof \ReflectionNamedType ? $type->getName() : (string) $type;
60 if (null !== $class) {
61 switch (strtolower($name)) {
62 case 'self':
63 return $class;
64 case 'parent':
65 return get_parent_class($class) ?: null;
66 }
67 }
68 return $name;
69 }
70 }
71