Skip to content

Commit d987ff6

Browse files
committed
Set theme namespaces & optimize loading extension files
Fixes #2 and refactors how extensions are loaded.
1 parent a756175 commit d987ff6

File tree

1 file changed

+60
-13
lines changed

1 file changed

+60
-13
lines changed

src/Drupal/Bootstrap.php

Lines changed: 60 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,21 @@ class Bootstrap
1717
*/
1818
private $drupalRoot;
1919

20+
/**
21+
* @var \PHPStan\Drupal\ExtensionDiscovery
22+
*/
23+
private $extensionDiscovery;
24+
2025
/**
2126
* @var array
2227
*/
2328
private $modules = [];
2429

30+
/**
31+
* @var array
32+
*/
33+
private $themes = [];
34+
2535
public function __construct()
2636
{
2737
$autoload_file = $GLOBALS['autoloaderInWorkingDirectory'];
@@ -51,16 +61,28 @@ public function __construct()
5161

5262
public function register(): void
5363
{
64+
$this->extensionDiscovery = new ExtensionDiscovery($this->drupalRoot);
65+
$this->extensionDiscovery->setProfileDirectories([]);
66+
$profiles = $this->extensionDiscovery->scan('profile');
67+
$profile_directories = array_map(function ($profile) {
68+
return $profile->getPath();
69+
}, $profiles);
70+
$this->extensionDiscovery->setProfileDirectories($profile_directories);
71+
72+
$this->modules = $this->extensionDiscovery->scan('module');
73+
$this->themes = $this->extensionDiscovery->scan('theme');
74+
5475
require $this->drupalRoot . '/core/includes/bootstrap.inc';
5576
require $this->drupalRoot . '/core/includes/common.inc';
5677
require $this->drupalRoot . '/core/includes/entity.inc';
5778
require $this->drupalRoot . '/core/includes/menu.inc';
5879
require $this->drupalRoot . '/core/includes/database.inc';
5980
require $this->drupalRoot . '/core/includes/file.inc';
6081
$core_namespaces = $this->getCoreNamespaces();
61-
$module_namespaces = $this->loadModules();
82+
$module_namespaces = $this->getModuleNamespaces();
83+
$theme_namespaces = $this->getThemeNamespaces();
6284

63-
$namespaces = array_merge($core_namespaces, $module_namespaces);
85+
$namespaces = array_merge($core_namespaces, $module_namespaces, $theme_namespaces);
6486

6587
foreach ($namespaces as $prefix => $paths) {
6688
if (is_array($paths)) {
@@ -78,6 +100,9 @@ public function register(): void
78100
$this->autoloader->add('Drupal\\KernelTests', $core_tests_dir);
79101
$this->autoloader->add('Drupal\\FunctionalTests', $core_tests_dir);
80102
$this->autoloader->add('Drupal\\FunctionalJavascriptTests', $core_tests_dir);
103+
104+
$this->loadModules();
105+
$this->loadThemes();
81106
}
82107

83108
/**
@@ -106,17 +131,8 @@ protected function getCoreNamespaces(): array
106131
return $namespaces;
107132
}
108133

109-
protected function loadModules(): array
134+
protected function getModuleNamespaces(): array
110135
{
111-
$listing = new ExtensionDiscovery($this->drupalRoot);
112-
$listing->setProfileDirectories([]);
113-
$profiles = $listing->scan('profile');
114-
$profile_directories = array_map(function ($profile) {
115-
return $profile->getPath();
116-
}, $profiles);
117-
$listing->setProfileDirectories($profile_directories);
118-
119-
$this->modules = $listing->scan('module');
120136
$namespaces = [];
121137
foreach ($this->modules as $module_name => $module) {
122138
$module_dir = $this->drupalRoot . '/' . $module->getPath();
@@ -141,6 +157,25 @@ protected function loadModules(): array
141157
}
142158
}
143159
}
160+
}
161+
162+
return $namespaces;
163+
}
164+
165+
protected function getThemeNamespaces(): array
166+
{
167+
$namespaces = [];
168+
foreach ($this->themes as $theme_name => $theme) {
169+
$theme_dir = $this->drupalRoot . '/' . $theme->getPath();
170+
$namespaces["Drupal\\$theme_name"] = $theme_dir . '/src';
171+
}
172+
return $namespaces;
173+
}
174+
175+
protected function loadModules(): void
176+
{
177+
foreach ($this->modules as $module_name => $module) {
178+
$module_dir = $this->drupalRoot . '/' . $module->getPath();
144179
// Need to ensure .module is enabled.
145180
if ($module->getExtensionFilename() !== null) {
146181
require $module_dir . '/' . $module->getExtensionFilename();
@@ -163,7 +198,19 @@ protected function loadModules(): array
163198
}
164199
}
165200
}
201+
}
166202

167-
return $namespaces;
203+
protected function loadThemes(): void
204+
{
205+
foreach ($this->themes as $theme_name => $theme) {
206+
if ($theme_name === 'bootstrap') {
207+
continue;
208+
}
209+
$theme_dir = $this->drupalRoot . '/' . $theme->getPath();
210+
// Need to ensure .theme is enabled.
211+
if ($theme->getExtensionFilename() !== null) {
212+
require $theme_dir . '/' . $theme->getExtensionFilename();
213+
}
214+
}
168215
}
169216
}

0 commit comments

Comments
 (0)