- }
- if (isset($name)) {
- return isset($info[$name]) ? $info[$name] : [];
- }
- return $info;
-}
-
-/**
- * Helper function to scan and collect module .info.yml data.
- *
- * @return \Drupal\Core\Extension\Extension[]
- * An associative array of module information.
- */
-function _system_rebuild_module_data() {
- $listing = new ExtensionDiscovery(\Drupal::root());
-
- // Find installation profiles. This needs to happen before performing a
- // module scan as the module scan requires knowing what the active profile is.
- // @todo Remove as part of https://www.drupal.org/node/2186491.
- $profiles = $listing->scan('profile');
- $profile = drupal_get_profile();
- if ($profile && isset($profiles[$profile])) {
- // Prime the drupal_get_filename() static cache with the profile info file
- // location so we can use drupal_get_path() on the active profile during
- // the module scan.
- // @todo Remove as part of https://www.drupal.org/node/2186491.
- drupal_get_filename('profile', $profile, $profiles[$profile]->getPathname());
- }
-
- // Find modules.
- $modules = $listing->scan('module');
- // Include the installation profile in modules that are loaded.
- if ($profile) {
- $modules[$profile] = $profiles[$profile];
- // Installation profile hooks are always executed last.
- $modules[$profile]->weight = 1000;
- }
-
- // Set defaults for module info.
- $defaults = [
- 'dependencies' => [],
- 'description' => '',
- 'package' => 'Other',
- 'version' => NULL,
- 'php' => DRUPAL_MINIMUM_PHP,
- ];
-
- // Read info files for each module.
- foreach ($modules as $key => $module) {
- // Look for the info file.
- $module->info = \Drupal::service('info_parser')->parse($module->getPathname());
-
- // Add the info file modification time, so it becomes available for
- // contributed modules to use for ordering module lists.
- $module->info['mtime'] = $module->getMTime();
-
- // Merge in defaults and save.
- $modules[$key]->info = $module->info + $defaults;
-
- // Installation profiles are hidden by default, unless explicitly specified
- // otherwise in the .info.yml file.
- if ($key == $profile && !isset($modules[$key]->info['hidden'])) {
- $modules[$key]->info['hidden'] = TRUE;
- }
-
- // Invoke hook_system_info_alter() to give installed modules a chance to
- // modify the data in the .info.yml files if necessary.
- // @todo Remove $type argument, obsolete with $module->getType().
- $type = 'module';
- \Drupal::moduleHandler()->alter('system_info', $modules[$key]->info, $modules[$key], $type);
- }
-
- // It is possible that a module was marked as required by
- // hook_system_info_alter() and modules that it depends on are not required.
- foreach ($modules as $module) {
- _system_rebuild_module_data_ensure_required($module, $modules);
- }
-
- if ($profile && isset($modules[$profile])) {
- // The installation profile is required, if it's a valid module.
- $modules[$profile]->info['required'] = TRUE;
- // Add a default distribution name if the profile did not provide one.
- // @see install_profile_info()
- // @see drupal_install_profile_distribution_name()
- if (!isset($modules[$profile]->info['distribution']['name'])) {
- $modules[$profile]->info['distribution']['name'] = 'Drupal';