From faefc6074f4f31e2b143c22fdef932b545723f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Tue, 3 Nov 2015 16:40:26 -0800 Subject: [PATCH] [DependencyInjection] Autowing: exclude abstract definitons --- .../DependencyInjection/Compiler/AutowirePass.php | 6 ++++++ .../Tests/Compiler/AutowirePassTest.php | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index d07e91a93e..81470a8398 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -138,11 +138,17 @@ class AutowirePass implements CompilerPassInterface */ private function populateAvailableType($id, Definition $definition) { + // Never use abstract services + if ($definition->isAbstract()) { + return; + } + foreach ($definition->getAutowiringTypes() as $type) { $this->definedTypes[$type] = true; $this->types[$type] = $id; } + // Cannot use reflection if the class isn't set if (!$definition->getClass()) { return; } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index 85beebe553..cc29ea93e0 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -216,6 +216,21 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase $pass = new AutowirePass(); $pass->process($container); } + + public function testDontUseAbstractServices() + { + $container = new ContainerBuilder(); + + $container->register('abstract_foo', __NAMESPACE__.'\Foo')->setAbstract(true); + $container->register('foo', __NAMESPACE__.'\Foo'); + $container->register('bar', __NAMESPACE__.'\Bar')->setAutowired(true); + + $pass = new AutowirePass(); + $pass->process($container); + + $arguments = $container->getDefinition('bar')->getArguments(); + $this->assertSame('foo', (string) $arguments[0]); + } } class Foo