From b3e17d2101530092f96ff9c1967ab2b5f556b90a Mon Sep 17 00:00:00 2001 From: Mikhail Marynich Date: Fri, 11 Jan 2019 16:53:30 +0100 Subject: [PATCH] Revert "bug #29597 [DI] fix reporting bindings on overriden services as unused (nicolas-grekas)" This reverts commit 44e9a91f306169aff0573bcb8380e3d5f9c912d0, reversing changes made to 91b28ff0817e33f7430084ef4e4b431c6648989d. --- .../Compiler/ResolveBindingsPass.php | 2 - .../DependencyInjection/ContainerBuilder.php | 46 +++---------------- .../Compiler/ResolveBindingsPassTest.php | 18 -------- .../ResolveChildDefinitionsPassTest.php | 2 +- .../Tests/ContainerBuilderTest.php | 2 +- .../Fixtures/config/instanceof.expected.yml | 6 +-- .../Fixtures/config/prototype.expected.yml | 10 ++-- 7 files changed, 17 insertions(+), 69 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php index 166e23441c62..bcf265ab4723 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php @@ -34,8 +34,6 @@ class ResolveBindingsPass extends AbstractRecursivePass */ public function process(ContainerBuilder $container) { - $this->usedBindings = $container->getRemovedBindingIds(); - try { parent::process($container); diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php index 93239a703db5..5fe6f2ae6fdf 100644 --- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php +++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php @@ -123,8 +123,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface private $removedIds = array(); - private $removedBindingIds = array(); - private static $internalTypes = array( 'int' => true, 'float' => true, @@ -533,8 +531,7 @@ public function set($id, $service) throw new BadMethodCallException(sprintf('Setting service "%s" for an unknown or non-synthetic service definition on a compiled container is not allowed.', $id)); } - $this->removeId($id); - unset($this->removedIds[$id]); + unset($this->definitions[$id], $this->aliasDefinitions[$id], $this->removedIds[$id]); parent::set($id, $service); } @@ -547,7 +544,8 @@ public function set($id, $service) public function removeDefinition($id) { if (isset($this->definitions[$id = $this->normalizeId($id)])) { - $this->removeId($id); + unset($this->definitions[$id]); + $this->removedIds[$id] = true; } } @@ -878,8 +876,7 @@ public function setAlias($alias, $id) throw new InvalidArgumentException(sprintf('An alias can not reference itself, got a circular reference on "%s".', $alias)); } - $this->removeId($alias); - unset($this->removedIds[$alias]); + unset($this->definitions[$alias], $this->removedIds[$alias]); return $this->aliasDefinitions[$alias] = $id; } @@ -892,7 +889,8 @@ public function setAlias($alias, $id) public function removeAlias($alias) { if (isset($this->aliasDefinitions[$alias = $this->normalizeId($alias)])) { - $this->removeId($alias); + unset($this->aliasDefinitions[$alias]); + $this->removedIds[$alias] = true; } } @@ -1021,8 +1019,7 @@ public function setDefinition($id, Definition $definition) $id = $this->normalizeId($id); - $this->removeId($id); - unset($this->removedIds[$id]); + unset($this->aliasDefinitions[$id], $this->removedIds[$id]); return $this->definitions[$id] = $definition; } @@ -1555,18 +1552,6 @@ public static function getInitializedConditionals($value) return $services; } - /** - * Gets removed binding ids. - * - * @return array - * - * @internal - */ - public function getRemovedBindingIds() - { - return $this->removedBindingIds; - } - /** * Computes a reasonably unique hash of a value. * @@ -1671,21 +1656,4 @@ private function inVendors($path) return false; } - - private function removeId($id) - { - $this->removedIds[$id] = true; - unset($this->aliasDefinitions[$id]); - - if (!isset($this->definitions[$id])) { - return; - } - - foreach ($this->definitions[$id]->getBindings() as $binding) { - list(, $identifier) = $binding->getValues(); - $this->removedBindingIds[$identifier] = true; - } - - unset($this->definitions[$id]); - } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php index 24909e1155fb..d59b95af5c40 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php @@ -111,22 +111,4 @@ public function testScalarSetter() $this->assertEquals(array(array('setDefaultLocale', array('fr'))), $definition->getMethodCalls()); } - - public function testOverriddenBindings() - { - $container = new ContainerBuilder(); - - $binding = new BoundArgument('bar'); - - $container->register('foo', 'stdClass') - ->setBindings(array('$foo' => clone $binding)); - $container->register('bar', 'stdClass') - ->setBindings(array('$foo' => clone $binding)); - - $container->register('foo', 'stdClass'); - - (new ResolveBindingsPass())->process($container); - - $this->assertInstanceOf('stdClass', $container->get('foo')); - } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveChildDefinitionsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveChildDefinitionsPassTest.php index 863f2833e5f7..1575bd7b0775 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveChildDefinitionsPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveChildDefinitionsPassTest.php @@ -434,7 +434,7 @@ protected function process(ContainerBuilder $container) /** * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException - * @expectedExceptionMessageRegExp /^Circular reference detected for service "a", path: "a -> c -> b -> a"./ + * @expectedExceptionMessageRegExp /^Circular reference detected for service "c", path: "c -> b -> a -> c"./ */ public function testProcessDetectsChildDefinitionIndirectCircularReference() { diff --git a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php index 354b44187d6b..0bf1befa3f84 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php @@ -559,7 +559,7 @@ public function testMerge() $config->setDefinition('baz', new Definition('BazClass')); $config->setAlias('alias_for_foo', 'foo'); $container->merge($config); - $this->assertEquals(array('foo', 'bar', 'service_container', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones'); + $this->assertEquals(array('service_container', 'foo', 'bar', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones'); $aliases = $container->getAliases(); $this->assertArrayHasKey('alias_for_foo', $aliases); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/instanceof.expected.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/instanceof.expected.yml index 9f0bfbba78a2..b12a304221dd 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/instanceof.expected.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/instanceof.expected.yml @@ -4,9 +4,6 @@ services: class: Symfony\Component\DependencyInjection\ContainerInterface public: true synthetic: true - foo: - class: App\FooService - public: true Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo: class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo public: true @@ -19,3 +16,6 @@ services: shared: false configurator: c + foo: + class: App\FooService + public: true diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/prototype.expected.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/prototype.expected.yml index 0af4d530a087..ebfe087d779c 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/prototype.expected.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/prototype.expected.yml @@ -4,22 +4,22 @@ services: class: Symfony\Component\DependencyInjection\ContainerInterface public: true synthetic: true - Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar: - class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar + Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo: + class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo public: true tags: - { name: foo } - { name: baz } deprecated: '%service_id%' - lazy: true arguments: [1] factory: f - Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo: - class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo + Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar: + class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar public: true tags: - { name: foo } - { name: baz } deprecated: '%service_id%' + lazy: true arguments: [1] factory: f