public function freezePackageReflection($packageKey)
{
if (!$this->initialized) {
$this->initialize();
}
$package = $this->packageManager->getPackage($packageKey);
$packageNamespace = $package->getNamespace() . '\\';
$reflectionData = ['classReflectionData' => $this->classReflectionData, 'classSchemata' => $this->classSchemata, 'annotatedClasses' => $this->annotatedClasses, 'classesByMethodAnnotations' => $this->classesByMethodAnnotations];
$reflectionData['classReflectionData'] = $this->filterArrayByClassesInNamespace($reflectionData['classReflectionData'], $packageNamespace);
$reflectionData['classSchemata'] = $this->filterArrayByClassesInNamespace($reflectionData['classSchemata'], $packageNamespace);
$reflectionData['annotatedClasses'] = $this->filterArrayByClassesInNamespace($reflectionData['annotatedClasses'], $packageNamespace);
$reflectionData['classesByMethodAnnotations'] = isset($reflectionData['classesByMethodAnnotations']) ? $reflectionData['classesByMethodAnnotations'] : [];
$methodAnnotationsFilters = function ($className) use($packageNamespace) {
return strpos($className, $packageNamespace) === 0;
};
foreach ($reflectionData['classesByMethodAnnotations'] as $annotationClassName => $classNames) {
$reflectionData['classesByMethodAnnotations'][$annotationClassName] = array_filter($classNames, $methodAnnotationsFilters);
}
$precompiledReflectionStoragePath = $this->getPrecompiledReflectionStoragePath();
if (!is_dir($precompiledReflectionStoragePath)) {
Files::createDirectoryRecursively($precompiledReflectionStoragePath);
}
$pathAndFilename = $precompiledReflectionStoragePath . $packageKey . '.dat';
file_put_contents($pathAndFilename, extension_loaded('igbinary') ? igbinary_serialize($reflectionData) : serialize($reflectionData));
}