From 2a20c6e605607327568aa80aad41825588fc716f Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 25 Apr 2020 22:12:11 +0200 Subject: [PATCH] [DI] fix not preloading excluded service factories --- .../Command/CacheClearCommand.php | 4 ++-- .../DependencyInjection/Dumper/PhpDumper.php | 22 ++++++++++++++----- .../Tests/Fixtures/php/services9_as_files.txt | 3 --- .../php/services9_inlined_factories.txt | 1 - .../php/services9_lazy_inlined_factories.txt | 1 - .../php/services_non_shared_lazy_as_files.txt | 1 - 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php index 188f8dc737..25c006f759 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php @@ -118,9 +118,9 @@ EOF $warmer = $kernel->getContainer()->get('cache_warmer'); // non optional warmers already ran during container compilation $warmer->enableOnlyOptionalWarmers(); - $preload = (array) $warmer->warmUp($warmupDir); + $preload = (array) $warmer->warmUp($realCacheDir); - if (file_exists($preloadFile = $warmupDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) { + if (file_exists($preloadFile = $realCacheDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) { Preloader::append($preloadFile, $preload); } } diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 318932e8f4..b379bae2ed 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -270,7 +270,7 @@ class %s extends {$options['class']} EOF; $files = []; - + $preloadedFiles = []; $ids = $this->container->getRemovedIds(); foreach ($this->container->getDefinitions() as $id => $definition) { if (!$definition->isPublic()) { @@ -287,11 +287,16 @@ EOF; } if (!$this->inlineFactories) { - foreach ($this->generateServiceFiles($services) as $file => $c) { + foreach ($this->generateServiceFiles($services) as $file => [$c, $preload]) { $files[$file] = sprintf($fileTemplate, substr($file, 0, -4), $c); + + if ($preload) { + $preloadedFiles[$file] = $file; + } } foreach ($proxyClasses as $file => $c) { $files[$file] = " $c) { $code["Container{$hash}/{$file}"] = substr_replace($c, "namespace ? "\nnamespace {$this->namespace};\n" : ''; $time = $options['build_time']; @@ -318,8 +328,8 @@ EOF; if ($this->preload && null !== $autoloadFile = $this->getAutoloadFile()) { $autoloadFile = substr($this->export($autoloadFile), 2, -1); - $factoryFiles = array_reverse(array_keys($code)); - $factoryFiles = implode("';\nrequire __DIR__.'/", $factoryFiles); + $preloadedFiles = array_reverse($preloadedFiles); + $preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles); $code[$options['class'].'.preload.php'] = << $definition) { if ((list($file, $code) = $services[$id]) && null !== $file && ($definition->isPublic() || !$this->isTrivialInstance($definition) || isset($this->locatedIds[$id]))) { - yield $file => $code; + yield $file => [$code, !$definition->hasTag($this->preloadTags[1]) && !$definition->isDeprecated() && !$definition->hasErrors()]; } } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt index 46270abd36..d7ab192e9a 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt @@ -907,10 +907,8 @@ require __DIR__.'/Container%s/getFooWithInlineService.php'; require __DIR__.'/Container%s/getFooBarService.php'; require __DIR__.'/Container%s/getFoo_BazService.php'; require __DIR__.'/Container%s/getFooService.php'; -require __DIR__.'/Container%s/getFactorySimpleService.php'; require __DIR__.'/Container%s/getFactoryServiceSimpleService.php'; require __DIR__.'/Container%s/getFactoryServiceService.php'; -require __DIR__.'/Container%s/getDeprecatedServiceService.php'; require __DIR__.'/Container%s/getDecoratorServiceWithNameService.php'; require __DIR__.'/Container%s/getDecoratorServiceService.php'; require __DIR__.'/Container%s/getConfiguredServiceSimpleService.php'; @@ -919,7 +917,6 @@ require __DIR__.'/Container%s/getBazService.php'; require __DIR__.'/Container%s/getBar23Service.php'; require __DIR__.'/Container%s/getBAR22Service.php'; require __DIR__.'/Container%s/getBAR2Service.php'; -require __DIR__.'/Container%s/removed-ids.php'; $classes = []; $classes[] = 'Bar\FooClass'; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt index 56179d07d2..34f1689ce6 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt @@ -548,7 +548,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader; require dirname(__DIR__, %d).'%svendor/autoload.php'; require __DIR__.'/Container%s/ProjectServiceContainer.php'; -require __DIR__.'/Container%s/removed-ids.php'; $classes = []; $classes[] = 'Bar\FooClass'; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt index 4c428483ac..f1dd4db451 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt @@ -171,7 +171,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader; require dirname(__DIR__, %d).'%svendor/autoload.php'; require __DIR__.'/Container%s/ProjectServiceContainer.php'; -require __DIR__.'/Container%s/removed-ids.php'; $classes = []; $classes[] = 'Bar\FooClass'; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt index 428c75e766..a47c983a72 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt @@ -113,7 +113,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader; require dirname(__DIR__, %d).'%svendor/autoload.php'; require __DIR__.'/Container%s/ProjectServiceContainer.php'; require __DIR__.'/Container%s/getNonSharedFooService.php'; -require __DIR__.'/Container%s/removed-ids.php'; $classes = []; $classes[] = 'Bar\FooLazyClass';