Viewing file: ResolveHotPathPass.php (2.49 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/* * This file is part of the Symfony package. * * (c) Fabien Potencier <[email protected]> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */
namespace Symfony\Component\DependencyInjection\Compiler;
use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference;
/** * Propagate "container.hot_path" tags to referenced services. * * @author Nicolas Grekas <[email protected]> */ class ResolveHotPathPass extends AbstractRecursivePass { private $tagName; private $resolvedIds = [];
public function __construct(string $tagName = 'container.hot_path') { if (0 < \func_num_args()) { trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); }
$this->tagName = $tagName; }
/** * {@inheritdoc} */ public function process(ContainerBuilder $container) { try { parent::process($container); $container->getDefinition('service_container')->clearTag($this->tagName); } finally { $this->resolvedIds = []; } }
/** * {@inheritdoc} */ protected function processValue($value, bool $isRoot = false) { if ($value instanceof ArgumentInterface) { return $value; }
if ($value instanceof Definition && $isRoot) { if ($value->isDeprecated()) { return $value->clearTag($this->tagName); }
$this->resolvedIds[$this->currentId] = true;
if (!$value->hasTag($this->tagName)) { return $value; } }
if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->hasDefinition($id = (string) $value)) { $definition = $this->container->getDefinition($id);
if ($definition->isDeprecated() || $definition->hasTag($this->tagName)) { return $value; }
$definition->addTag($this->tagName);
if (isset($this->resolvedIds[$id])) { parent::processValue($definition, false); }
return $value; }
return parent::processValue($value, $isRoot); } }
|