PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 6.1.0
Defender Security – Malware Scanner, Login Security & Firewall v6.1.0
6.3.0 6.2.3 6.2.4 6.2.0 6.2.1 6.2.2 6.1.0 5.3.1 5.4.0 5.4.1 5.5.0 5.5.1 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.7.2 5.8.0 5.8.1 5.9.0 6.0.0 6.0.1 3.0.1 3.1.0 All 141 releases
defender-security / lib / packages / DI / Invoker / FactoryParameterResolver.php

FactoryParameterResolver.php in Defender Security – Malware Scanner, Login Security & Firewall 6.1.0, at lib/packages/DI/Invoker/FactoryParameterResolver.php

70 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace WPMU_DEV\Defender\Vendor\DI\Invoker;
6
7 use WPMU_DEV\Defender\Vendor\Invoker\ParameterResolver\ParameterResolver;
8 use WPMU_DEV\Defender\Vendor\Psr\Container\ContainerInterface;
9 use ReflectionFunctionAbstract;
10 use ReflectionNamedType;
11
12 /**
13 * Inject the container, the definition or any other service using type-hints.
14 *
15 * {@internal This class is similar to TypeHintingResolver and TypeHintingContainerResolver,
16 * we use this instead for performance reasons}
17 *
18 * @author Quim Calpe <[email protected]>
19 * @author Matthieu Napoli <[email protected]>
20 */
21 class FactoryParameterResolver implements ParameterResolver
22 {
23 public function __construct(
24 private ContainerInterface $container,
25 ) {
26 }
27
28 public function getParameters(
29 ReflectionFunctionAbstract $reflection,
30 array $providedParameters,
31 array $resolvedParameters,
32 ) : array {
33 $parameters = $reflection->getParameters();
34
35 // Skip parameters already resolved
36 if (! empty($resolvedParameters)) {
37 $parameters = array_diff_key($parameters, $resolvedParameters);
38 }
39
40 foreach ($parameters as $index => $parameter) {
41 $parameterType = $parameter->getType();
42 if (!$parameterType) {
43 // No type
44 continue;
45 }
46 if (!$parameterType instanceof ReflectionNamedType) {
47 // Union types are not supported
48 continue;
49 }
50 if ($parameterType->isBuiltin()) {
51 // Primitive types are not supported
52 continue;
53 }
54
55 $parameterClass = $parameterType->getName();
56
57 if ($parameterClass === 'WPMU_DEV\Defender\Vendor\Psr\Container\ContainerInterface') {
58 $resolvedParameters[$index] = $this->container;
59 } elseif ($parameterClass === 'WPMU_DEV\Defender\Vendor\DI\Factory\RequestedEntry') {
60 // By convention the second parameter is the definition
61 $resolvedParameters[$index] = $providedParameters[1];
62 } elseif ($this->container->has($parameterClass)) {
63 $resolvedParameters[$index] = $this->container->get($parameterClass);
64 }
65 }
66
67 return $resolvedParameters;
68 }
69 }
70