fixed a circular call (closes #6864)

This commit is contained in:
Fabien Potencier 2013-02-04 12:10:17 +01:00
parent 115114b0dc
commit 74f2fcfed0

View File

@ -952,11 +952,11 @@ EOF;
*
* @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) {
@ -964,11 +964,13 @@ EOF;
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;
}
}