PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 5.8.1
Defender Security – Malware Scanner, Login Security & Firewall v5.8.1
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 / Definition / Resolver / ResolverDispatcher.php

ResolverDispatcher.php in Defender Security – Malware Scanner, Login Security & Firewall 5.8.1, at lib/packages/DI/Definition/Resolver/ResolverDispatcher.php

126 lines 4.7 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\Definition\Resolver;
6
7 use WPMU_DEV\Defender\Vendor\DI\Definition\ArrayDefinition;
8 use WPMU_DEV\Defender\Vendor\DI\Definition\DecoratorDefinition;
9 use WPMU_DEV\Defender\Vendor\DI\Definition\Definition;
10 use WPMU_DEV\Defender\Vendor\DI\Definition\EnvironmentVariableDefinition;
11 use WPMU_DEV\Defender\Vendor\DI\Definition\Exception\InvalidDefinition;
12 use WPMU_DEV\Defender\Vendor\DI\Definition\FactoryDefinition;
13 use WPMU_DEV\Defender\Vendor\DI\Definition\InstanceDefinition;
14 use WPMU_DEV\Defender\Vendor\DI\Definition\ObjectDefinition;
15 use WPMU_DEV\Defender\Vendor\DI\Definition\SelfResolvingDefinition;
16 use WPMU_DEV\Defender\Vendor\DI\Proxy\ProxyFactoryInterface;
17 use WPMU_DEV\Defender\Vendor\Psr\Container\ContainerInterface;
18
19 /**
20 * Dispatches to more specific resolvers.
21 *
22 * Dynamic dispatch pattern.
23 *
24 * @since 5.0
25 * @author Matthieu Napoli <[email protected]>
26 *
27 * @psalm-suppress MissingTemplateParam
28 */
29 class ResolverDispatcher implements DefinitionResolver
30 {
31 private ?ArrayResolver $arrayResolver = null;
32 private ?FactoryResolver $factoryResolver = null;
33 private ?DecoratorResolver $decoratorResolver = null;
34 private ?ObjectCreator $objectResolver = null;
35 private ?InstanceInjector $instanceResolver = null;
36 private ?EnvironmentVariableResolver $envVariableResolver = null;
37
38 public function __construct(
39 private ContainerInterface $container,
40 private ProxyFactoryInterface $proxyFactory,
41 ) {
42 }
43
44 /**
45 * Resolve a definition to a value.
46 *
47 * @param Definition $definition Object that defines how the value should be obtained.
48 * @param array $parameters Optional parameters to use to build the entry.
49 *
50 * @return mixed Value obtained from the definition.
51 * @throws InvalidDefinition If the definition cannot be resolved.
52 */
53 public function resolve(Definition $definition, array $parameters = []) : mixed
54 {
55 // Special case, tested early for speed
56 if ($definition instanceof SelfResolvingDefinition) {
57 return $definition->resolve($this->container);
58 }
59
60 $definitionResolver = $this->getDefinitionResolver($definition);
61
62 return $definitionResolver->resolve($definition, $parameters);
63 }
64
65 public function isResolvable(Definition $definition, array $parameters = []) : bool
66 {
67 // Special case, tested early for speed
68 if ($definition instanceof SelfResolvingDefinition) {
69 return $definition->isResolvable($this->container);
70 }
71
72 $definitionResolver = $this->getDefinitionResolver($definition);
73
74 return $definitionResolver->isResolvable($definition, $parameters);
75 }
76
77 /**
78 * Returns a resolver capable of handling the given definition.
79 *
80 * @throws \RuntimeException No definition resolver was found for this type of definition.
81 */
82 private function getDefinitionResolver(Definition $definition) : DefinitionResolver
83 {
84 switch (true) {
85 case $definition instanceof ObjectDefinition:
86 if (! $this->objectResolver) {
87 $this->objectResolver = new ObjectCreator($this, $this->proxyFactory);
88 }
89
90 return $this->objectResolver;
91 case $definition instanceof DecoratorDefinition:
92 if (! $this->decoratorResolver) {
93 $this->decoratorResolver = new DecoratorResolver($this->container, $this);
94 }
95
96 return $this->decoratorResolver;
97 case $definition instanceof FactoryDefinition:
98 if (! $this->factoryResolver) {
99 $this->factoryResolver = new FactoryResolver($this->container, $this);
100 }
101
102 return $this->factoryResolver;
103 case $definition instanceof ArrayDefinition:
104 if (! $this->arrayResolver) {
105 $this->arrayResolver = new ArrayResolver($this);
106 }
107
108 return $this->arrayResolver;
109 case $definition instanceof EnvironmentVariableDefinition:
110 if (! $this->envVariableResolver) {
111 $this->envVariableResolver = new EnvironmentVariableResolver($this);
112 }
113
114 return $this->envVariableResolver;
115 case $definition instanceof InstanceDefinition:
116 if (! $this->instanceResolver) {
117 $this->instanceResolver = new InstanceInjector($this, $this->proxyFactory);
118 }
119
120 return $this->instanceResolver;
121 default:
122 throw new \RuntimeException('No definition resolver was configured for definition of type ' . $definition::class);
123 }
124 }
125 }
126