/** * Builds the package namespaces and classes paths for the given packages * * @throws \Exception * @return void */ protected function buildPackageNamespacesAndClassesPaths() { $didLock = $this->acquireLock(); // Take a look again, after lock is acquired if (!$this->loadPackageNamespacesFromCache()) { try { foreach ($this->packages as $package) { $this->buildPackageNamespaceAndClassesPath($package); } $this->sortPackageNamespaces(); $this->savePackageNamespacesAndClassesPathsToCache(); // The class alias map has to be rebuilt first, because ext_autoload files can contain // old class names that need established class aliases. $classNameToAliasMapping = $this->classAliasMap->setPackages($this->packages)->buildMappingAndInitializeEarlyInstanceMapping(); $this->loadClassFilesFromAutoloadRegistryIntoRuntimeClassInformationCache($this->packages); $this->classAliasMap->buildMappingFiles($classNameToAliasMapping); $this->transferRuntimeClassInformationCacheEntriesToClassesCache(); } catch (\Exception $e) { // Catching all Exceptions, as we don't know where in the process the class cache building breaks we // need to clear our cache and also release our lock before we throw the Exception again to the user. $this->clearClassesCache(); $this->releaseLock($didLock); throw $e; } } $this->releaseLock($didLock); }
/** * Builds the package namespaces and classes paths for the given packages * * @return void */ protected function buildPackageNamespacesAndClassesPaths() { $didLock = $this->acquireLock(); // Take a look again, after lock is acquired if (!$this->loadPackageNamespacesFromCache()) { foreach ($this->packages as $package) { $this->buildPackageNamespaceAndClassesPath($package); } $this->sortPackageNamespaces(); $this->savePackageNamespacesAndClassesPathsToCache(); // The class alias map has to be rebuilt first, because ext_autoload files can contain // old class names that need established class aliases. $classNameToAliasMapping = $this->classAliasMap->setPackages($this->packages)->buildMappingAndInitializeEarlyInstanceMapping(); $this->loadClassFilesFromAutoloadRegistryIntoRuntimeClassInformationCache($this->packages); $this->classAliasMap->buildMappingFiles($classNameToAliasMapping); $this->transferRuntimeClassInformationCacheEntriesToClassesCache(); } $this->releaseLock($didLock); }