PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / console / DependencyInjection / AddConsoleCommandPass.php
independent-analytics / vendor / symfony / console / DependencyInjection Last commit date
AddConsoleCommandPass.php 2 years ago
AddConsoleCommandPass.php
120 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 IAWP_SCOPED\Symfony\Component\Console\DependencyInjection;
12
13 use IAWP_SCOPED\Symfony\Component\Console\Command\Command;
14 use IAWP_SCOPED\Symfony\Component\Console\Command\LazyCommand;
15 use IAWP_SCOPED\Symfony\Component\Console\CommandLoader\ContainerCommandLoader;
16 use IAWP_SCOPED\Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
17 use IAWP_SCOPED\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
18 use IAWP_SCOPED\Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
19 use IAWP_SCOPED\Symfony\Component\DependencyInjection\ContainerBuilder;
20 use IAWP_SCOPED\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
21 use IAWP_SCOPED\Symfony\Component\DependencyInjection\Reference;
22 use IAWP_SCOPED\Symfony\Component\DependencyInjection\TypedReference;
23 /**
24 * Registers console commands.
25 *
26 * @author Grégoire Pineau <lyrixx@lyrixx.info>
27 * @internal
28 */
29 class AddConsoleCommandPass implements CompilerPassInterface
30 {
31 private $commandLoaderServiceId;
32 private $commandTag;
33 private $noPreloadTag;
34 private $privateTagName;
35 public function __construct(string $commandLoaderServiceId = 'console.command_loader', string $commandTag = 'console.command', string $noPreloadTag = 'container.no_preload', string $privateTagName = 'container.private')
36 {
37 if (0 < \func_num_args()) {
38 trigger_deprecation('symfony/console', '5.3', 'Configuring "%s" is deprecated.', __CLASS__);
39 }
40 $this->commandLoaderServiceId = $commandLoaderServiceId;
41 $this->commandTag = $commandTag;
42 $this->noPreloadTag = $noPreloadTag;
43 $this->privateTagName = $privateTagName;
44 }
45 public function process(ContainerBuilder $container)
46 {
47 $commandServices = $container->findTaggedServiceIds($this->commandTag, \true);
48 $lazyCommandMap = [];
49 $lazyCommandRefs = [];
50 $serviceIds = [];
51 foreach ($commandServices as $id => $tags) {
52 $definition = $container->getDefinition($id);
53 $definition->addTag($this->noPreloadTag);
54 $class = $container->getParameterBag()->resolveValue($definition->getClass());
55 if (isset($tags[0]['command'])) {
56 $aliases = $tags[0]['command'];
57 } else {
58 if (!($r = $container->getReflectionClass($class))) {
59 throw new InvalidArgumentException(\sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
60 }
61 if (!$r->isSubclassOf(Command::class)) {
62 throw new InvalidArgumentException(\sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class));
63 }
64 $aliases = \str_replace('%', '%%', $class::getDefaultName() ?? '');
65 }
66 $aliases = \explode('|', $aliases ?? '');
67 $commandName = \array_shift($aliases);
68 if ($isHidden = '' === $commandName) {
69 $commandName = \array_shift($aliases);
70 }
71 if (null === $commandName) {
72 if (!$definition->isPublic() || $definition->isPrivate() || $definition->hasTag($this->privateTagName)) {
73 $commandId = 'console.command.public_alias.' . $id;
74 $container->setAlias($commandId, $id)->setPublic(\true);
75 $id = $commandId;
76 }
77 $serviceIds[] = $id;
78 continue;
79 }
80 $description = $tags[0]['description'] ?? null;
81 unset($tags[0]);
82 $lazyCommandMap[$commandName] = $id;
83 $lazyCommandRefs[$id] = new TypedReference($id, $class);
84 foreach ($aliases as $alias) {
85 $lazyCommandMap[$alias] = $id;
86 }
87 foreach ($tags as $tag) {
88 if (isset($tag['command'])) {
89 $aliases[] = $tag['command'];
90 $lazyCommandMap[$tag['command']] = $id;
91 }
92 $description = $description ?? $tag['description'] ?? null;
93 }
94 $definition->addMethodCall('setName', [$commandName]);
95 if ($aliases) {
96 $definition->addMethodCall('setAliases', [$aliases]);
97 }
98 if ($isHidden) {
99 $definition->addMethodCall('setHidden', [\true]);
100 }
101 if (!$description) {
102 if (!($r = $container->getReflectionClass($class))) {
103 throw new InvalidArgumentException(\sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
104 }
105 if (!$r->isSubclassOf(Command::class)) {
106 throw new InvalidArgumentException(\sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class));
107 }
108 $description = \str_replace('%', '%%', $class::getDefaultDescription() ?? '');
109 }
110 if ($description) {
111 $definition->addMethodCall('setDescription', [$description]);
112 $container->register('.' . $id . '.lazy', LazyCommand::class)->setArguments([$commandName, $aliases, $description, $isHidden, new ServiceClosureArgument($lazyCommandRefs[$id])]);
113 $lazyCommandRefs[$id] = new Reference('.' . $id . '.lazy');
114 }
115 }
116 $container->register($this->commandLoaderServiceId, ContainerCommandLoader::class)->setPublic(\true)->addTag($this->noPreloadTag)->setArguments([ServiceLocatorTagPass::register($container, $lazyCommandRefs), $lazyCommandMap]);
117 $container->setParameter('console.command.ids', $serviceIds);
118 }
119 }
120