From f90f53e9153bf3e718ec0ec3de845e312f5742d4 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 7 Feb 2017 17:17:32 +0100 Subject: [PATCH] [FrameworkBundle] Wire ArrayCache for annotation reader at bootstrap --- .../Compiler/AddAnnotationsCachedReaderPass.php | 12 +++++++++++- .../DependencyInjection/FrameworkExtension.php | 3 ++- .../FrameworkBundle/Resources/config/annotations.xml | 4 +++- .../DependencyInjection/FrameworkExtensionTest.php | 2 ++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddAnnotationsCachedReaderPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddAnnotationsCachedReaderPass.php index 4b75738b2fd1a..508899379f691 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddAnnotationsCachedReaderPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddAnnotationsCachedReaderPass.php @@ -13,6 +13,7 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; /** * @internal @@ -27,7 +28,16 @@ public function process(ContainerBuilder $container) // "annotations.cached_reader" is wired late so that any passes using // "annotation_reader" at build time don't get any cache if ($container->hasDefinition('annotations.cached_reader')) { - $container->setAlias('annotation_reader', 'annotations.cached_reader'); + $reader = $container->getDefinition('annotations.cached_reader'); + $tags = $reader->getTags(); + + if (isset($tags['annotations.cached_reader'][0]['provider'])) { + if ($container->hasAlias($provider = $tags['annotations.cached_reader'][0]['provider'])) { + $provider = (string) $container->getAlias($provider); + } + $container->set('annotations.cached_reader', null); + $container->setDefinition('annotations.cached_reader', $reader->replaceArgument(1, new Reference($provider))); + } } } } diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 7429eed2f27a0..93c6129adf31f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1039,10 +1039,11 @@ private function registerAnnotationsConfiguration(array $config, ContainerBuilde $container ->getDefinition('annotations.cached_reader') - ->replaceArgument(1, new Reference($cacheService)) ->replaceArgument(2, $config['debug']) + ->addTag('annotations.cached_reader', array('provider' => $cacheService)) ->addAutowiringType(Reader::class) ; + $container->setAlias('annotation_reader', 'annotations.cached_reader'); } else { $container->removeDefinition('annotations.cached_reader'); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml index a2a0fb4065329..146a875ad7dc9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml @@ -11,7 +11,9 @@ - + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index fec9b4be16ab2..71b5fada8f0f4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -12,6 +12,7 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; +use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension; use Symfony\Component\Cache\Adapter\ApcuAdapter; use Symfony\Component\Cache\Adapter\ChainAdapter; @@ -818,6 +819,7 @@ protected function createContainerFromFile($file, $data = array(), $resetCompile $container->getCompilerPassConfig()->setOptimizationPasses(array()); $container->getCompilerPassConfig()->setRemovingPasses(array()); } + $container->getCompilerPassConfig()->setBeforeRemovingPasses(array(new AddAnnotationsCachedReaderPass())); $container->compile(); return self::$containerCache[$cacheKey] = $container;