[Dependency-Injection] Fix issue where non-defined services were attempted to be removed

This commit is contained in:
Ciaran McNulty 2018-07-03 16:15:31 +01:00 committed by Nicolas Grekas
parent f27c3a8584
commit 53155c9800
2 changed files with 16 additions and 1 deletions

View File

@ -60,7 +60,7 @@ class RemoveUnusedDefinitionsPass extends AbstractRecursivePass implements Repea
$ids = $this->connectedIds; $ids = $this->connectedIds;
$this->connectedIds = array(); $this->connectedIds = array();
foreach ($ids as $id) { foreach ($ids as $id) {
if (!isset($connectedIds[$id]) && $container->has($id)) { if (!isset($connectedIds[$id]) && $container->hasDefinition($id)) {
$connectedIds[$id] = true; $connectedIds[$id] = true;
$this->processValue($container->getDefinition($id)); $this->processValue($container->getDefinition($id));
} }

View File

@ -127,6 +127,21 @@ class RemoveUnusedDefinitionsPassTest extends TestCase
$this->assertSame(1, $envCounters['FOOBAR']); $this->assertSame(1, $envCounters['FOOBAR']);
} }
public function testProcessDoesNotErrorOnServicesThatDoNotHaveDefinitions()
{
$container = new ContainerBuilder();
$container
->register('defined')
->addArgument(new Reference('not.defined'))
->setPublic(true);
$container->set('not.defined', new \StdClass());
$this->process($container);
$this->assertFalse($container->hasDefinition('not.defined'));
}
protected function process(ContainerBuilder $container) protected function process(ContainerBuilder $container)
{ {
(new RemoveUnusedDefinitionsPass())->process($container); (new RemoveUnusedDefinitionsPass())->process($container);