diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 2a29b01c9005a..889394f3ba52c 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -958,11 +958,11 @@ private function getDefinitionsFromArguments(array $arguments) * * @return Boolean */ - private function hasReference($id, array $arguments, $deep = false) + private function hasReference($id, array $arguments, $deep = false, $visited = array()) { foreach ($arguments as $argument) { if (is_array($argument)) { - if ($this->hasReference($id, $argument, $deep)) { + if ($this->hasReference($id, $argument, $deep, $visited)) { return true; } } elseif ($argument instanceof Reference) { @@ -970,11 +970,13 @@ private function hasReference($id, array $arguments, $deep = false) return true; } - if ($deep) { + if ($deep && !isset($visited[(string) $argument])) { + $visited[(string) $argument] = true; + $service = $this->container->getDefinition((string) $argument); $arguments = array_merge($service->getMethodCalls(), $service->getArguments(), $service->getProperties()); - if ($this->hasReference($id, $arguments, $deep)) { + if ($this->hasReference($id, $arguments, $deep, $visited)) { return true; } }