10000 [ClassLoader] Add ClassCollectionLoader::inline() to generate inlined… · symfony/symfony@2d5bd3b · GitHub
[go: up one dir, main page]

Skip to content

Commit 2d5bd3b

Browse files
[ClassLoader] Add ClassCollectionLoader::inline() to generate inlined-classes files
1 parent 5213778 commit 2d5bd3b

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

src/Symfony/Component/ClassLoader/ClassCollectionLoader.php

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
4343

4444
self::$loaded[$name] = true;
4545

46-
$declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
47-
4846
if ($adaptive) {
47+
$declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
48+
4949
// don't include already declared classes
5050
$classes = array_diff($classes, $declared);
5151

@@ -84,18 +84,46 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
8484
}
8585
}
8686

87-
if (!$reload && is_file($cache)) {
87+
if (!$reload && file_exists($cache)) {
8888
require_once $cache;
8989

9090
return;
9191
}
92+
if (!$adaptive) {
93+
$declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
94+
}
95+
96+
self::inline($classes, $cache, $declared);
97+
98+
if ($autoReload) {
99+
// save the resources
100+
self::writeCacheFile($metadata, serialize(array($files, $classes)));
101+
}
102+
}
103+
104+
/**
105+
* Generates a file where classes and their parents are inlined.
106+
*
107+
* @param array $classes An array of classes to load
108+
* @param string $cache The file where classes are inlined
109+
* @param array $excluded An array of classes that won't be inlined
110+
*
111+
* @throws \RuntimeException When class can't be loaded
112+
*/
113+
public static function inline($classes, $cache, array $excluded)
114+
{
115+
$declared = array();
116+
foreach (self::getOrderedClasses($excluded) as $class) {
117+
$declared[$class->getName()] = true;
118+
}
92119

93120
$files = array();
94121
$content = '';
95122
foreach (self::getOrderedClasses($classes) as $class) {
96-
if (in_array($class->getName(), $declared)) {
123+
if (isset($declared[$class->getName()])) {
97124
continue;
98125
}
126+
$declared[$class->getName()] = true;
99127

100128
$files[] = $class->getFileName();
101129

@@ -113,15 +141,11 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
113141
}
114142

115143
// cache the core classes
144+
$cacheDir = dirname($cache);
116145
if (!is_dir($cacheDir) && !@mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
117146
throw new \RuntimeException(sprintf('Class Collection Loader was not able to create directory "%s"', $cacheDir));
118147
}
119148
self::writeCacheFile($cache, '<?php '.$content);
120-
121-
if ($autoReload) {
122-
// save the resources
123-
self::writeCacheFile($metadata, serialize(array($files, $classes)));
124-
}
125149
}
126150

127151
/**

0 commit comments

Comments
 (0)
0