/usr/share/php/Symfony/Component/DependencyInjection/Compiler/RemoveUnusedDefinitionsPass.php (2860B)
*/ class RemoveUnusedDefinitionsPass extends AbstractRecursivePass { private $connectedIds = []; /** * Processes the ContainerBuilder to remove unused definitions. */ public function process(ContainerBuilder $container) { try { $this->enableExpressionProcessing(); $this->container = $container; $connectedIds = []; $aliases = $container->getAliases(); foreach ($aliases as $id => $alias) { if ($alias->isPublic()) { $this->connectedIds[] = (string) $aliases[$id]; } } foreach ($container->getDefinitions() as $id => $definition) { if ($definition->isPublic()) { $connectedIds[$id] = true; $this->processValue($definition); } } while ($this->connectedIds) { $ids = $this->connectedIds; $this->connectedIds = []; foreach ($ids as $id) { if (!isset($connectedIds[$id]) && $container->hasDefinition($id)) { $connectedIds[$id] = true; $this->processValue($container->getDefinition($id)); } } } foreach ($container->getDefinitions() as $id => $definition) { if (!isset($connectedIds[$id])) { $container->removeDefinition($id); $container->resolveEnvPlaceholders(!$definition->hasErrors() ? serialize($definition) : $definition); $container->log($this, sprintf('Removed service "%s"; reason: unused.', $id)); } } } finally { $this->container = null; $this->connectedIds = []; } } /** * {@inheritdoc} */ protected function processValue($value, bool $isRoot = false) { if (!$value instanceof Reference) { return parent::processValue($value, $isRoot); } if (ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior()) { $this->connectedIds[] = (string) $value; } return $value; } }