[DI] Prevent AutowirePass from triggering irrelevant deprecations
This commit is contained in:
parent
200b45eb43
commit
77927f4b33
@ -303,9 +303,28 @@ class AutowirePass implements CompilerPassInterface
|
|||||||
|
|
||||||
$class = $this->container->getParameterBag()->resolveValue($class);
|
$class = $this->container->getParameterBag()->resolveValue($class);
|
||||||
|
|
||||||
|
if ($deprecated = $definition->isDeprecated()) {
|
||||||
|
$prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) {
|
||||||
|
return (E_USER_DEPRECATED === $level || !$prevErrorHandler) ? false : $prevErrorHandler($level, $message, $file, $line);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$e = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$reflector = new \ReflectionClass($class);
|
$reflector = new \ReflectionClass($class);
|
||||||
} catch (\ReflectionException $e) {
|
} catch (\Exception $e) {
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($deprecated) {
|
||||||
|
restore_error_handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $e) {
|
||||||
|
if (!$e instanceof \ReflectionException) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
$reflector = false;
|
$reflector = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,6 +442,17 @@ class AutowirePassTest extends TestCase
|
|||||||
$this->assertTrue($container->hasDefinition('bar'));
|
$this->assertTrue($container->hasDefinition('bar'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testProcessDoesNotTriggerDeprecations()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->register('deprecated', 'Symfony\Component\DependencyInjection\Tests\Fixtures\DeprecatedClass')->setDeprecated(true);
|
||||||
|
$container->register('foo', __NAMESPACE__.'\Foo');
|
||||||
|
$container->register('bar', __NAMESPACE__.'\Bar')->setAutowired(true);
|
||||||
|
|
||||||
|
$pass = new AutowirePass();
|
||||||
|
$pass->process($container);
|
||||||
|
}
|
||||||
|
|
||||||
public function testEmptyStringIsKept()
|
public function testEmptyStringIsKept()
|
||||||
{
|
{
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
|
||||||
|
|
||||||
|
@trigger_error('deprecated', E_USER_DEPRECATED);
|
||||||
|
|
||||||
|
class DeprecatedClass
|
||||||
|
{
|
||||||
|
}
|
Reference in New Issue
Block a user