X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fclass-loader%2FClassCollectionLoader.php;h=1d53c482f98f4cc2b083e3bdfa5fa44f2339b08d;hb=680c79a86e3ed402f263faeac92e89fb6d9edcc0;hp=6f88286de0ff54bc62da05870cf184e3d6bafd0f;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/class-loader/ClassCollectionLoader.php b/vendor/symfony/class-loader/ClassCollectionLoader.php index 6f88286de..1d53c482f 100644 --- a/vendor/symfony/class-loader/ClassCollectionLoader.php +++ b/vendor/symfony/class-loader/ClassCollectionLoader.php @@ -44,10 +44,7 @@ class ClassCollectionLoader self::$loaded[$name] = true; if ($adaptive) { - $declared = array_merge(get_declared_classes(), get_declared_interfaces()); - if (function_exists('get_declared_traits')) { - $declared = array_merge($declared, get_declared_traits()); - } + $declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits()); // don't include already declared classes $classes = array_diff($classes, $declared); @@ -98,10 +95,39 @@ class ClassCollectionLoader return; } if (!$adaptive) { - $declared = array_merge(get_declared_classes(), get_declared_interfaces()); - if (function_exists('get_declared_traits')) { - $declared = array_merge($declared, get_declared_traits()); - } + $declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits()); + } + + $files = self::inline($classes, $cache, $declared); + + if ($autoReload) { + // save the resources + self::writeCacheFile($metadata, serialize(array(array_values($files), $classes))); + } + } + + /** + * Generates a file where classes and their parents are inlined. + * + * @param array $classes An array of classes to load + * @param string $cache The file where classes are inlined + * @param array $excluded An array of classes that won't be inlined + * + * @return array The source map of inlined classes, with classes as keys and files as values + * + * @throws \RuntimeException When class can't be loaded + */ + public static function inline($classes, $cache, array $excluded) + { + $declared = array(); + foreach (self::getOrderedClasses($excluded) as $class) { + $declared[$class->getName()] = true; + } + + // cache the core classes + $cacheDir = dirname($cache); + if (!is_dir($cacheDir) && !@mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) { + throw new \RuntimeException(sprintf('Class Collection Loader was not able to create directory "%s"', $cacheDir)); } $spacesRegex = '(?:\s*+(?:(?:\#|//)[^\n]*+\n|/\*(?:(?getName(), $declared)) { + if (isset($declared[$class->getName()])) { continue; } + $declared[$class->getName()] = true; - $files[] = $file = $class->getFileName(); + $files[$class->getName()] = $file = $class->getFileName(); $c = file_get_contents($file); if (preg_match($dontInlineRegex, $c)) { @@ -158,10 +185,7 @@ REGEX; } self::writeCacheFile($cache, '= 70000) { + if (\PHP_VERSION_ID >= 70000) { // PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098 unset($tokens, $rawChunk); gc_mem_caches(); @@ -335,12 +359,10 @@ REGEX; $traits = array(); - if (method_exists('ReflectionClass', 'getTraits')) { - foreach ($classes as $c) { - foreach (self::resolveDependencies(self::computeTraitDeps($c), $c) as $trait) { - if ($trait !== $c) { - $traits[] = $trait; - } + foreach ($classes as $c) { + foreach (self::resolveDependencies(self::computeTraitDeps($c), $c) as $trait) { + if ($trait !== $c) { + $traits[] = $trait; } } }