3 namespace Drupal\Core\Installer;
5 use Drupal\Core\Extension\ModuleExtensionList;
8 * Overrides the module extension list to have a static cache.
10 class InstallerModuleExtensionList extends ModuleExtensionList {
13 * Static version of the added file names during the installer.
19 protected static $staticAddedPathNames;
24 public function setPathname($extension_name, $pathname) {
25 parent::setPathname($extension_name, $pathname);
27 // In the early installer the container is rebuilt multiple times. Therefore
28 // we have to keep the added filenames across those rebuilds. This is not a
29 // final design, but rather just a workaround resolved at some point,
31 // @todo Remove as part of https://drupal.org/project/drupal/issues/2934063
32 static::$staticAddedPathNames[$extension_name] = $pathname;
38 public function getPathname($extension_name) {
39 if (isset($this->addedPathNames[$extension_name])) {
40 return $this->addedPathNames[$extension_name];
42 elseif (isset($this->pathNames[$extension_name])) {
43 return $this->pathNames[$extension_name];
45 elseif (isset(static::$staticAddedPathNames[$extension_name])) {
46 return static::$staticAddedPathNames[$extension_name];
48 elseif (($path_names = $this->getPathnames()) && isset($path_names[$extension_name])) {
49 // Ensure we don't have to do path scanning more than really needed.
50 foreach ($path_names as $extension => $path_name) {
51 static::$staticAddedPathNames[$extension] = $path_name;
53 return $path_names[$extension_name];
55 throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist.");