Skip to content

Commit 249377c

Browse files
[DI] Warn when a definition relies on a deprecated class in ContainerBuilder::createService()
1 parent c06db30 commit 249377c

File tree

4 files changed

+39
-14
lines changed

4 files changed

+39
-14
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -841,22 +841,29 @@ private function registerAnnotationsConfiguration(array $config, ContainerBuilde
841841
{
842842
$loader->load('annotations.xml');
843843

844-
if ('file' === $config['cache']) {
845-
$cacheDir = $container->getParameterBag()->resolveValue($config['file_cache_dir']);
846-
if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
847-
throw new \RuntimeException(sprintf('Could not create cache directory "%s".', $cacheDir));
844+
if ('none' !== $config['cache']) {
845+
if ('file' === $config['cache']) {
846+
$cacheDir = $container->getParameterBag()->resolveValue($config['file_cache_dir']);
847+
if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
848+
throw new \RuntimeException(sprintf('Could not create cache directory "%s".', $cacheDir));
849+
}
850+
851+
$container
852+
->getDefinition('annotations.php_file_cache')
853+
->replaceArgument(0, $cacheDir)
854+
;
855+
856+
// The annotations.file_cache_reader service is deprecated
857+
$container
858+
->getDefinition('annotations.file_cache_reader')
859+
->replaceArgument(1, $cacheDir)
860+
->replaceArgument(2, $config['debug'])
861+
;
848862
}
849863

850-
$container
851-
->getDefinition('annotations.file_cache_reader')
852-
->replaceArgument(1, $cacheDir)
853-
->replaceArgument(2, $config['debug'])
854-
;
855-
$container->setAlias('annotation_reader', 'annotations.file_cache_reader');
856-
} elseif ('none' !== $config['cache']) {
857864
$container
858865
->getDefinition('annotations.cached_reader')
859-
->replaceArgument(1, new Reference($config['cache']))
866+
->replaceArgument(1, new Reference('file' !== $config['cache'] ? $config['cache'] : 'annotations.php_file_cache'))
860867
->replaceArgument(2, $config['debug'])
861868
;
862869
$container->setAlias('annotation_reader', 'annotations.cached_reader');

src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@
1919
<argument /><!-- Debug-Flag -->
2020
</service>
2121

22+
<service id="annotations.php_file_cache" class="Doctrine\Common\Cache\PhpFileCache" public="false">
23+
<argument /><!-- Cache-Directory -->
24+
</service>
25+
2226
<service id="annotations.file_cache_reader" class="%annotations.file_cache_reader.class%" public="false">
27+
<deprecated>The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.</deprecated>
2328
<argument type="service" id="annotations.reader" />
2429
<argument /><!-- Cache-Directory -->
2530
<argument /><!-- Debug Flag -->

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,9 @@ public function testAnnotations()
320320
{
321321
$container = $this->createContainerFromFile('full');
322322

323-
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.file_cache_reader')->getArgument(1));
324-
$this->assertInstanceOf('Doctrine\Common\Annotations\FileCacheReader', $container->get('annotation_reader'));
323+
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.php_file_cache')->getArgument(0));
324+
$this->assertSame('annotations.cached_reader', (string) $container->getAlias('annotation_reader'));
325+
$this->assertSame('annotations.php_file_cache', (string) $container->getDefinition('annotations.cached_reader')->getArgument(1));
325326
}
326327

327328
public function testFileLinkFormat()

src/Symfony/Component/DependencyInjection/ContainerBuilder.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,14 @@ public function createService(Definition $definition, $id, $tryProxy = true)
899899
}
900900

901901
$service = call_user_func_array($factory, $arguments);
902+
903+
if (!$definition->isDeprecated() && is_array($factory) && is_string($factory[0])) {
904+
$r = new \ReflectionClass($factory[0]);
905+
906+
if (0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
907+
@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);
908+
}
909+
}
902910
} elseif (null !== $definition->getFactoryMethod(false)) {
903911
if (null !== $definition->getFactoryClass(false)) {
904912
$factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
@@ -913,6 +921,10 @@ public function createService(Definition $definition, $id, $tryProxy = true)
913921
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
914922

915923
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
924+
925+
if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
926+
@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);
927+
}
916928
}
917929

918930
if ($tryProxy || !$definition->isLazy()) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy