Skip to content

Commit 265f90d

Browse files
[DI] Trigger notice when a definition relies on a deprecated class
1 parent a76eae8 commit 265f90d

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
@@ -973,6 +973,14 @@ public function createService(Definition $definition, $id, $tryProxy = true)
973973
}
974974

975975
$service = call_user_func_array($factory, $arguments);
976+
977+
if (!$definition->isDeprecated() && is_array($factory) && is_string($factory[0])) {
978+
$r = new \ReflectionClass($factory[0]);
979+
980+
if (0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
981+
@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);
982+
}
983+
}
976984
} elseif (null !== $definition->getFactoryMethod(false)) {
977985
if (null !== $definition->getFactoryClass(false)) {
978986
$factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
@@ -987,6 +995,10 @@ public function createService(Definition $definition, $id, $tryProxy = true)
987995
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
988996

989997
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
998+
999+
if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
1000+
@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);
1001+
}
9901002
}
9911003

9921004
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