@@ -43,9 +43,9 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
43
43
44
44
self ::$ loaded [$ name ] = true ;
45
45
46
- $ declared = array_merge (get_declared_classes (), get_declared_interfaces (), get_declared_traits ());
47
-
48
46
if ($ adaptive ) {
47
+ $ declared = array_merge (get_declared_classes (), get_declared_interfaces (), get_declared_traits ());
48
+
49
49
// don't include already declared classes
50
50
$ classes = array_diff ($ classes , $ declared );
51
51
@@ -84,18 +84,46 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
84
84
}
85
85
}
86
86
87
- if (!$ reload && is_file ($ cache )) {
87
+ if (!$ reload && file_exists ($ cache )) {
88
88
require_once $ cache ;
89
89
90
90
return ;
91
91
}
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
+ }
92
119
93
120
$ files = array ();
94
121
$ content = '' ;
95
122
foreach (self ::getOrderedClasses ($ classes ) as $ class ) {
96
- if (in_array ( $ class ->getName (), $ declared )) {
123
+ if (isset ( $ declared [ $ class ->getName ()] )) {
97
124
continue ;
98
125
}
126
+ $ declared [$ class ->getName ()] = true ;
99
127
100
128
$ files [] = $ class ->getFileName ();
101
129
@@ -113,15 +141,11 @@ public static function load($classes, $cacheDir, $name, $autoReload, $adaptive =
113
141
}
114
142
115
143
// cache the core classes
144
+ $ cacheDir = dirname ($ cache );
116
145
if (!is_dir ($ cacheDir ) && !@mkdir ($ cacheDir , 0777 , true ) && !is_dir ($ cacheDir )) {
117
146
throw new \RuntimeException (sprintf ('Class Collection Loader was not able to create directory "%s" ' , $ cacheDir ));
118
147
}
119
148
self ::writeCacheFile ($ cache , '<?php ' .$ content );
120
-
121
- if ($ autoReload ) {
122
- // save the resources
123
- self ::writeCacheFile ($ metadata , serialize (array ($ files , $ classes )));
124
- }
125
149
}
126
150
127
151
/**
0 commit comments