From a01453a726b76f709f56658d179cfea6560fb165 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 13 Mar 2015 23:10:36 +0000
Subject: [PATCH] Issue #2367747 by Palashvijay4O, andypost, Alienpruts,
 Cottser, er.pushpinderrana, gaurav.pahuja, pfrenssen, rpayanm, vadim.hirbu:
 Remove usage of system_rebuild_theme_data()

---
 core/includes/bootstrap.inc                       |  3 ++-
 core/includes/theme.maintenance.inc               |  7 -------
 core/includes/update.inc                          |  2 +-
 core/lib/Drupal/Core/Updater/Theme.php            |  2 +-
 core/modules/locale/locale.compare.inc            |  2 +-
 .../src/Tests/Extension/ModuleHandlerTest.php     |  2 +-
 core/modules/system/system.module                 |  2 +-
 .../update/src/Tests/UpdateContribTest.php        |  2 +-
 core/modules/update/src/UpdateManager.php         | 15 +++++++++++++--
 core/modules/update/update.services.yml           |  2 +-
 10 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 89da4b7e4773..45af368345a4 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -236,7 +236,8 @@ function drupal_get_filename($type, $name, $filename = NULL) {
       }
     }
     // If still unknown, retrieve the file list prepared in state by
-    // system_rebuild_module_data() and system_rebuild_theme_data().
+    // system_rebuild_module_data() and
+    // \Drupal\Core\Extension\ThemeHandlerInterface::rebuildThemeData().
     if (!isset($files[$type][$name]) && \Drupal::hasService('state')) {
       $files[$type] += \Drupal::state()->get('system.' . $type . '.files', array());
     }
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 861ed7df21ad..d63ce1be6c74 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -62,13 +62,6 @@ function _drupal_maintenance_theme() {
     }
   }
 
-  // Ensure that system.module is loaded.
-  if (!function_exists('system_rebuild_theme_data')) {
-    $module_handler = \Drupal::moduleHandler();
-    $module_handler->addModule('system', 'core/modules/system');
-    $module_handler->load('system');
-  }
-
   $themes = \Drupal::service('theme_handler')->listInfo();
 
   // If no themes are installed yet, or if the requested custom theme is not
diff --git a/core/includes/update.inc b/core/includes/update.inc
index b5c60b39fd5e..ee3d66c690ef 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -44,7 +44,7 @@ function update_check_incompatibility($name, $type = 'module') {
     // We need to do a full rebuild here to make sure the database reflects any
     // code changes that were made in the filesystem before the update script
     // was initiated.
-    $themes = system_rebuild_theme_data();
+    $themes = \Drupal::service('theme_handler')->rebuildThemeData();
     $modules = system_rebuild_module_data();
   }
 
diff --git a/core/lib/Drupal/Core/Updater/Theme.php b/core/lib/Drupal/Core/Updater/Theme.php
index b379325edb5c..ea853c89508d 100644
--- a/core/lib/Drupal/Core/Updater/Theme.php
+++ b/core/lib/Drupal/Core/Updater/Theme.php
@@ -76,7 +76,7 @@ public static function canUpdate($project_name) {
   public function postInstall() {
     // Update the theme info.
     clearstatcache();
-    system_rebuild_theme_data();
+    \Drupal::service('theme_handler')->rebuildThemeData();
   }
 
   /**
diff --git a/core/modules/locale/locale.compare.inc b/core/modules/locale/locale.compare.inc
index e131d99caf12..efefa3b47df2 100644
--- a/core/modules/locale/locale.compare.inc
+++ b/core/modules/locale/locale.compare.inc
@@ -126,7 +126,7 @@ function locale_translation_project_list() {
       'interface translation server pattern',
     );
     $module_data = _locale_translation_prepare_project_list(system_rebuild_module_data(), 'module');
-    $theme_data = _locale_translation_prepare_project_list(system_rebuild_theme_data(), 'theme');
+    $theme_data = _locale_translation_prepare_project_list(\Drupal::service('theme_handler')->rebuildThemeData(), 'theme');
     $project_info = new ProjectInfo();
     $project_info->processInfoList($projects, $module_data, 'module', TRUE, $additional_whitelist);
     $project_info->processInfoList($projects, $theme_data, 'theme', TRUE, $additional_whitelist);
diff --git a/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php b/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
index 130ffd2de3ed..d2d6fed9cfb1 100644
--- a/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
@@ -295,7 +295,7 @@ public function testModuleStreamWrappers() {
    */
   function testThemeMetaData() {
     // Generate the list of available themes.
-    $themes = system_rebuild_theme_data();
+    $themes = \Drupal::service('theme_handler')->rebuildThemeData();
     // Check that the mtime field exists for the bartik theme.
     $this->assertTrue(!empty($themes['bartik']->info['mtime']), 'The bartik.info.yml file modification time field is present.');
     // Use 0 if mtime isn't present, to avoid an array index notice.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index d73ba633c220..f784b3f4b2f4 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -849,7 +849,7 @@ function system_check_directory($form_element, FormStateInterface $form_state) {
  *   array is returned.
  *
  * @see system_rebuild_module_data()
- * @see system_rebuild_theme_data()
+ * @see \Drupal\Core\Extension\ThemeHandlerInterface::rebuildThemeData()
  */
 function system_get_info($type, $name = NULL) {
   $info = array();
diff --git a/core/modules/update/src/Tests/UpdateContribTest.php b/core/modules/update/src/Tests/UpdateContribTest.php
index 77f7b9beda08..dde3e52d3ac0 100644
--- a/core/modules/update/src/Tests/UpdateContribTest.php
+++ b/core/modules/update/src/Tests/UpdateContribTest.php
@@ -293,7 +293,7 @@ function testUpdateHiddenBaseTheme() {
     );
     $this->config('update_test.settings')->set('system_info', $system_info)->save();
     $projects = update_get_projects();
-    $theme_data = system_rebuild_theme_data();
+    $theme_data = \Drupal::service('theme_handler')->rebuildThemeData();
     $project_info = new ProjectInfo();
     $project_info->processInfoList($projects, $theme_data, 'theme', TRUE);
 
diff --git a/core/modules/update/src/UpdateManager.php b/core/modules/update/src/UpdateManager.php
index 065243068ec9..b92251b38413 100644
--- a/core/modules/update/src/UpdateManager.php
+++ b/core/modules/update/src/UpdateManager.php
@@ -9,6 +9,7 @@
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\ThemeHandlerInterface;
 use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
@@ -63,6 +64,13 @@ class UpdateManager implements UpdateManagerInterface {
    */
   protected $availableReleasesTempStore;
 
+  /**
+   * The theme handler.
+   *
+   * @var \Drupal\Core\Extension\ThemeHandlerInterface
+   */
+  protected $themeHandler;
+
   /**
    * Constructs a UpdateManager.
    *
@@ -76,13 +84,16 @@ class UpdateManager implements UpdateManagerInterface {
    *   The translation service.
    * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_expirable_factory
    *   The expirable key/value factory.
+   * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
+   *   The theme handler.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, UpdateProcessorInterface $update_processor, TranslationInterface $translation, KeyValueFactoryInterface $key_value_expirable_factory) {
+  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, UpdateProcessorInterface $update_processor, TranslationInterface $translation, KeyValueFactoryInterface $key_value_expirable_factory, ThemeHandlerInterface $theme_handler) {
     $this->updateSettings = $config_factory->get('update.settings');
     $this->moduleHandler = $module_handler;
     $this->updateProcessor = $update_processor;
     $this->stringTranslation = $translation;
     $this->keyValueStore = $key_value_expirable_factory->get('update');
+    $this->themeHandler = $theme_handler;
     $this->availableReleasesTempStore = $key_value_expirable_factory->get('update_available_releases');
     $this->projects = array();
   }
@@ -123,7 +134,7 @@ public function getProjects() {
       if (empty($this->projects)) {
         // Still empty, so we have to rebuild.
         $module_data = system_rebuild_module_data();
-        $theme_data = system_rebuild_theme_data();
+        $theme_data = $this->themeHandler->rebuildThemeData();
         $project_info = new ProjectInfo();
         $project_info->processInfoList($this->projects, $module_data, 'module', TRUE);
         $project_info->processInfoList($this->projects, $theme_data, 'theme', TRUE);
diff --git a/core/modules/update/update.services.yml b/core/modules/update/update.services.yml
index fe01f4785c6d..c14b8ccdb7ea 100644
--- a/core/modules/update/update.services.yml
+++ b/core/modules/update/update.services.yml
@@ -6,7 +6,7 @@ services:
       - { name: access_check, applies_to: _access_update_manager }
   update.manager:
     class: Drupal\update\UpdateManager
-    arguments: ['@config.factory', '@module_handler', '@update.processor', '@string_translation', '@keyvalue.expirable']
+    arguments: ['@config.factory', '@module_handler', '@update.processor', '@string_translation', '@keyvalue.expirable', '@theme_handler']
   update.processor:
     class: Drupal\update\UpdateProcessor
     arguments: ['@config.factory', '@queue', '@update.fetcher', '@state', '@private_key', '@keyvalue', '@keyvalue.expirable']
-- 
GitLab