[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;
$this->connectedIds = array();
foreach ($ids as $id) {
if (!isset($connectedIds[$id]) && $container->has($id)) {
if (!isset($connectedIds[$id]) && $container->hasDefinition($id)) {
$connectedIds[$id] = true;
$this->processValue($container->getDefinition($id));
}

View File

@ -127,6 +127,21 @@ class RemoveUnusedDefinitionsPassTest extends TestCase
$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)
{
(new RemoveUnusedDefinitionsPass())->process($container);