X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fdependency-injection%2FCompiler%2FResolveReferencesToAliasesPass.php;h=831d9945369180b4dc058820a38e64a80f6cf0e9;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=8514739a77dfdadd3cbf40fe31b233a1721508fc;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php b/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php index 8514739a7..831d99453 100644 --- a/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php +++ b/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; -use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -21,93 +20,56 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; * * @author Johannes M. Schmitt */ -class ResolveReferencesToAliasesPass implements CompilerPassInterface +class ResolveReferencesToAliasesPass extends AbstractRecursivePass { - private $container; - /** - * Processes the ContainerBuilder to replace references to aliases with actual service references. - * - * @param ContainerBuilder $container + * {@inheritdoc} */ public function process(ContainerBuilder $container) { - $this->container = $container; - - foreach ($container->getDefinitions() as $definition) { - if ($definition->isSynthetic() || $definition->isAbstract()) { - continue; - } - - $definition->setArguments($this->processArguments($definition->getArguments())); - $definition->setMethodCalls($this->processArguments($definition->getMethodCalls())); - $definition->setProperties($this->processArguments($definition->getProperties())); - $definition->setFactory($this->processFactory($definition->getFactory())); - } + parent::process($container); foreach ($container->getAliases() as $id => $alias) { - $aliasId = (string) $alias; - if ($aliasId !== $defId = $this->getDefinitionId($aliasId)) { - $container->setAlias($id, new Alias($defId, $alias->isPublic())); + $aliasId = $container->normalizeId($alias); + if ($aliasId !== $defId = $this->getDefinitionId($aliasId, $container)) { + $container->setAlias($id, $defId)->setPublic($alias->isPublic())->setPrivate($alias->isPrivate()); } } } /** - * Processes the arguments to replace aliases. - * - * @param array $arguments An array of References - * - * @return array An array of References + * {@inheritdoc} */ - private function processArguments(array $arguments) + protected function processValue($value, $isRoot = false) { - foreach ($arguments as $k => $argument) { - if (is_array($argument)) { - $arguments[$k] = $this->processArguments($argument); - } elseif ($argument instanceof Reference) { - $defId = $this->getDefinitionId($id = (string) $argument); + if ($value instanceof Reference) { + $defId = $this->getDefinitionId($id = $this->container->normalizeId($value), $this->container); - if ($defId !== $id) { - $arguments[$k] = new Reference($defId, $argument->getInvalidBehavior()); - } + if ($defId !== $id) { + return new Reference($defId, $value->getInvalidBehavior()); } } - return $arguments; - } - - private function processFactory($factory) - { - if (null === $factory || !is_array($factory) || !$factory[0] instanceof Reference) { - return $factory; - } - - $defId = $this->getDefinitionId($id = (string) $factory[0]); - - if ($defId !== $id) { - $factory[0] = new Reference($defId, $factory[0]->getInvalidBehavior()); - } - - return $factory; + return parent::processValue($value); } /** * Resolves an alias into a definition id. * - * @param string $id The definition or alias id to resolve + * @param string $id The definition or alias id to resolve + * @param ContainerBuilder $container * * @return string The definition id with aliases resolved */ - private function getDefinitionId($id) + private function getDefinitionId($id, ContainerBuilder $container) { $seen = array(); - while ($this->container->hasAlias($id)) { + while ($container->hasAlias($id)) { if (isset($seen[$id])) { throw new ServiceCircularReferenceException($id, array_keys($seen)); } $seen[$id] = true; - $id = (string) $this->container->getAlias($id); + $id = $container->normalizeId($container->getAlias($id)); } return $id;