8000 [FrameworkBundle] Compute list of early-declared classes in ClassCach… · symfony/symfony@7340dea · GitHub
[go: up one dir, main page]

Skip to content

Commit 7340dea

Browse files
[FrameworkBundle] Compute list of early-declared classes in ClassCacheCacheWarmer
1 parent 50ce504 commit 7340dea

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ClassCacheCacheWarmer.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121
*/
2222
class ClassCacheCacheWarmer implements CacheWarmerInterface
2323
{
24+
private $firstDeclaredClass;
25+
26+
public function __construct($firstDeclaredClass = null)
27+
{
28+
$this->firstDeclaredClass = $firstDeclaredClass;
29+
}
30+
2431
/**
2532
* Warms up the cache.
2633
*
@@ -37,8 +44,27 @@ public function warmUp($cacheDir)
3744
if (file_exists($cacheDir.'/classes.php')) {
3845
return;
3946
}
47+
$declared = false;
48+
49+
if (null !== $this->firstDeclaredClass && class_exists($this->firstDeclaredClass, false)) {
50+
$file = new \ReflectionClass($this->firstDeclaredClass);
51+
$file = $file->getFileName();
52+
$includedFiles = get_included_files();
53+
54+
if (false !== $i = array_search($file, $includedFiles)) {
55+
$includedFiles = array_slice($includedFiles, 0, 1 + $i);
56+
$includedFiles = array_flip($includedFiles);
57+
58+
$declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
59+
$declared = array_filter($declared, function ($class) use ($includedFiles) {
60+
$r = new \ReflectionClass($class);
61+
62+
return isset($includedFiles[$r->getFileName()]);
63+
});
64+
}
65+
}
4066

41-
ClassCollectionLoader::load(include($classmap), $cacheDir, 'classes', false);
67+
ClassCollectionLoader::inline(include($classmap), $cacheDir.'/classes.php', $declared);
4268
}
4369

4470
/**

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
<service id="kernel.class_cache.cache_warmer" class="Symfony\Bundle\FrameworkBundle\CacheWarmer\ClassCacheCacheWarmer">
2626
<tag name="kernel.cache_warmer" />
27+
<argument>Symfony\Component\HttpKernel\Kernel</argument>
2728
</service>
2829

2930
<service id="cache_clearer" class="Symfony\Component\HttpKernel\CacheClearer\ChainCacheClearer">

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"php": ">=5.5.9",
2020
"symfony/asset": "~2.8|~3.0",
2121
"symfony/cache": "~3.1",
22-
"symfony/class-loader": "~2.8|~3.0",
22+
"symfony/class-loader": "~3.2",
2323
"symfony/dependency-injection": "~3.2",
2424
"symfony/config": "~2.8|~3.0",
2525
"symfony/event-dispatcher": "~2.8|~3.0",

0 commit comments

Comments
 (0)
0