[DI] Warn when a definition relies on a deprecated class in ContainerBuilder::createService()
This commit is contained in:
parent
b6ab750e18
commit
ca69fa340c
@ -841,22 +841,29 @@ class FrameworkExtension extends Extension
|
||||
{
|
||||
$loader->load('annotations.xml');
|
||||
|
||||
if ('none' !== $config['cache']) {
|
||||
if ('file' === $config['cache']) {
|
||||
$cacheDir = $container->getParameterBag()->resolveValue($config['file_cache_dir']);
|
||||
if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
|
||||
throw new \RuntimeException(sprintf('Could not create cache directory "%s".', $cacheDir));
|
||||
}
|
||||
|
||||
$container
|
||||
->getDefinition('annotations.php_file_cache')
|
||||
->replaceArgument(0, $cacheDir)
|
||||
;
|
||||
|
||||
// The annotations.file_cache_reader service is deprecated
|
||||
$container
|
||||
->getDefinition('annotations.file_cache_reader')
|
||||
->replaceArgument(1, $cacheDir)
|
||||
->replaceArgument(2, $config['debug'])
|
||||
;
|
||||
$container->setAlias('annotation_reader', 'annotations.file_cache_reader');
|
||||
} elseif ('none' !== $config['cache']) {
|
||||
}
|
||||
|
||||
$container
|
||||
->getDefinition('annotations.cached_reader')
|
||||
->replaceArgument(1, new Reference($config['cache']))
|
||||
->replaceArgument(1, new Reference('file' !== $config['cache'] ? $config['cache'] : 'annotations.php_file_cache'))
|
||||
->replaceArgument(2, $config['debug'])
|
||||
;
|
||||
$container->setAlias('annotation_reader', 'annotations.cached_reader');
|
||||
|
@ -19,7 +19,12 @@
|
||||
<argument /><!-- Debug-Flag -->
|
||||
</service>
|
||||
|
||||
<service id="annotations.php_file_cache" class="Doctrine\Common\Cache\PhpFileCache" public="false">
|
||||
<argument /><!-- Cache-Directory -->
|
||||
</service>
|
||||
|
||||
<service id="annotations.file_cache_reader" class="%annotations.file_cache_reader.class%" public="false">
|
||||
<deprecated>The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.</deprecated>
|
||||
<argument type="service" id="annotations.reader" />
|
||||
<argument /><!-- Cache-Directory -->
|
||||
<argument /><!-- Debug Flag -->
|
||||
|
@ -320,8 +320,9 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
{
|
||||
$container = $this->createContainerFromFile('full');
|
||||
|
||||
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.file_cache_reader')->getArgument(1));
|
||||
$this->assertInstanceOf('Doctrine\Common\Annotations\FileCacheReader', $container->get('annotation_reader'));
|
||||
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.php_file_cache')->getArgument(0));
|
||||
$this->assertSame('annotations.cached_reader', (string) $container->getAlias('annotation_reader'));
|
||||
$this->assertSame('annotations.php_file_cache', (string) $container->getDefinition('annotations.cached_reader')->getArgument(1));
|
||||
}
|
||||
|
||||
public function testFileLinkFormat()
|
||||
|
@ -899,6 +899,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
||||
}
|
||||
|
||||
$service = call_user_func_array($factory, $arguments);
|
||||
|
||||
if (!$definition->isDeprecated() && is_array($factory) && is_string($factory[0])) {
|
||||
$r = new \ReflectionClass($factory[0]);
|
||||
|
||||
if (0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
|
||||
@trigger_error(sprintf('The "%s" service relies on the deprecated "%s" factory class. It should either be deprecated or its factory upgraded.', $id, $r->name), E_USER_DEPRECATED);
|
||||
}
|
||||
}
|
||||
} elseif (null !== $definition->getFactoryMethod(false)) {
|
||||
if (null !== $definition->getFactoryClass(false)) {
|
||||
$factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
|
||||
@ -913,6 +921,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
||||
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
|
||||
|
||||
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
|
||||
|
||||
if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
|
||||
@trigger_error(sprintf('The "%s" service relies on the deprecated "%s" class. It should either be deprecated or its implementation upgraded.', $id, $r->name), E_USER_DEPRECATED);
|
||||
}
|
||||
}
|
||||
|
||||
if ($tryProxy || !$definition->isLazy()) {
|
||||
|
Reference in New Issue
Block a user