From be3d11faa9175d89d66bce65be6f9bbf2cde3475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 16 Jan 2017 16:14:49 +0100 Subject: [PATCH] [DependencyInjection] Always autowire the constructor --- .../DependencyInjection/Compiler/AutowirePass.php | 14 +++++++++++--- .../Tests/Compiler/AutowirePassTest.php | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index 7aa2d2a64e..2afce310ea 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -120,14 +120,22 @@ class AutowirePass implements CompilerPassInterface * * @param string $id * @param \ReflectionClass $reflectionClass - * @param string[] $autowiredMethods + * @param string[] $configuredAutowiredMethods * * @return \ReflectionMethod[] */ - private function getMethodsToAutowire($id, \ReflectionClass $reflectionClass, array $autowiredMethods) + private function getMethodsToAutowire($id, \ReflectionClass $reflectionClass, array $configuredAutowiredMethods) { $found = array(); $regexList = array(); + + // Always try to autowire the constructor + if (in_array('__construct', $configuredAutowiredMethods, true)) { + $autowiredMethods = $configuredAutowiredMethods; + } else { + $autowiredMethods = array_merge(array('__construct'), $configuredAutowiredMethods); + } + foreach ($autowiredMethods as $pattern) { $regexList[] = '/^'.str_replace('\*', '.*', preg_quote($pattern, '/')).'$/i'; } @@ -147,7 +155,7 @@ class AutowirePass implements CompilerPassInterface } } - if ($notFound = array_diff($autowiredMethods, $found)) { + if ($notFound = array_diff($configuredAutowiredMethods, $found)) { $compiler = $this->container->getCompiler(); $compiler->addLogMessage($compiler->getLoggingFormatter()->formatUnusedAutowiringPatterns($this, $id, $notFound)); } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index bb7bed43be..e991a652f6 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -440,7 +440,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase // manually configure *one* call, to override autowiring $container ->register('setter_injection', SetterInjection::class) - ->setAutowiredMethods(array('__construct', 'set*')) + ->setAutowiredMethods(array('set*')) ->addMethodCall('setWithCallsConfigured', array('manual_arg1', 'manual_arg2')) ; @@ -557,7 +557,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase $container->register('c1', CollisionA::class); $container->register('c2', CollisionB::class); $aDefinition = $container->register('setter_injection_collision', SetterInjectionCollision::class); - $aDefinition->setAutowiredMethods(array('__construct', 'set*')); + $aDefinition->setAutowiredMethods(array('set*')); $pass = new AutowirePass(); $pass->process($container);