diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index d906da442e..3505d7f9d0 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -262,7 +262,7 @@ function drupal_get_filename($type, $name, $filename = NULL) {
     elseif (!isset($files[$type][$name])) {
       // If still unknown, retrieve the file list prepared in state by
       // \Drupal\Core\Extension\ExtensionList() and
-      // \Drupal\Core\Extension\ThemeHandlerInterface::rebuildThemeData().
+      // \Drupal\Core\Extension\ThemeExtensionList::rebuildThemeData().
       if (!isset($files[$type][$name]) && \Drupal::hasService('state')) {
         $files[$type] += \Drupal::state()->get('system.' . $type . '.files', []);
       }
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 80cc52cb81..9fb90789a7 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -68,7 +68,7 @@ function _drupal_maintenance_theme() {
   // installed, retrieve all available themes.
   /** @var \Drupal\Core\Theme\ThemeInitialization $theme_init */
   $theme_init = \Drupal::service('theme.initialization');
-  $theme_handler = \Drupal::service('theme_handler');
+  $theme_handler = \Drupal::service('extension.list.theme');
   if (empty($themes) || !isset($themes[$custom_theme])) {
     $themes = $theme_handler->rebuildThemeData();
     $theme_handler->addTheme($themes[$custom_theme]);
diff --git a/core/includes/update.inc b/core/includes/update.inc
index d7fe942ebd..861b0100d1 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -42,7 +42,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 = \Drupal::service('theme_handler')->rebuildThemeData();
+    $themes = \Drupal::service('extension.list.theme')->rebuildThemeData();
     $modules = system_rebuild_module_data();
   }
 
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index d54ff1fa1a..65647c8f22 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -247,6 +247,10 @@ public function reset() {
 
   /**
    * {@inheritdoc}
+   * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
+   *   Use Drupal\Core\Extension\ThemeExtensionList::rebuildThemeData()
+   *
+   * @see https://www.drupal.org/project/drupal/issues/2942001
    */
   public function rebuildThemeData() {
     $listing = $this->getExtensionDiscovery();
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
index a82be6a1d2..77dc546394 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
@@ -119,6 +119,11 @@ public function reset();
    *
    * @return \Drupal\Core\Extension\Extension[]
    *   An associative array of theme extensions.
+   *
+   * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
+   *   Use Drupal\Core\Extension\ThemeExtensionList::rebuildThemeData()
+   *
+   * @see https://www.drupal.org/project/drupal/issues/2942001
    */
   public function rebuildThemeData();
 
diff --git a/core/modules/config/tests/src/Functional/ConfigImportUITest.php b/core/modules/config/tests/src/Functional/ConfigImportUITest.php
index fd76990da6..e2f9a0d59c 100644
--- a/core/modules/config/tests/src/Functional/ConfigImportUITest.php
+++ b/core/modules/config/tests/src/Functional/ConfigImportUITest.php
@@ -502,7 +502,7 @@ public function testExtensionValidation() {
     $this->assertTrue(isset($module_data['node']->requires['text']), 'The Node module depends on the Text module.');
     // Bartik depends on classy.
     unset($core['theme']['classy']);
-    $theme_data = \Drupal::service('theme_handler')->rebuildThemeData();
+    $theme_data = \Drupal::service('extension.list.theme')->rebuildThemeData();
     $this->assertTrue(isset($theme_data['bartik']->requires['classy']), 'The Bartik theme depends on the Classy theme.');
     // This module does not exist.
     $core['module']['does_not_exist'] = 0;
diff --git a/core/modules/locale/locale.compare.inc b/core/modules/locale/locale.compare.inc
index c66af14108..21917ecbb3 100644
--- a/core/modules/locale/locale.compare.inc
+++ b/core/modules/locale/locale.compare.inc
@@ -104,7 +104,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(\Drupal::service('theme_handler')->rebuildThemeData(), 'theme');
+    $theme_data = _locale_translation_prepare_project_list(\Drupal::service('extension.list.theme')->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/System/ThemeTest.php b/core/modules/system/src/Tests/System/ThemeTest.php
index 78fac8eada..fa0d8a0371 100644
--- a/core/modules/system/src/Tests/System/ThemeTest.php
+++ b/core/modules/system/src/Tests/System/ThemeTest.php
@@ -421,7 +421,7 @@ public function testInstallAndSetAsDefault() {
     // This checks for a regression. See https://www.drupal.org/node/2498691.
     $this->assertNoText('The bartik theme was not found.');
 
-    $themes = \Drupal::service('theme_handler')->rebuildThemeData();
+    $themes = \Drupal::service('extension.list.theme')->rebuildThemeData();
     $version = $themes['bartik']->info['version'];
 
     // Confirm Bartik is indicated as the default theme.
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 143fed847d..e6b1990d2e 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1800,7 +1800,7 @@ function system_update_8014() {
   $theme_handler->refreshInfo();
   foreach ($theme_handler->listInfo() as $theme) {
     // We first check that a base theme is set because if it's set to false then
-    // it's unset in \Drupal\Core\Extension\ThemeHandler::rebuildThemeData().
+    // it's unset in \Drupal\Core\Extension\ThemeExtensionList::rebuildThemeData().
     if (isset($theme->info['base theme']) && $theme->info['base theme'] == 'stable') {
       $theme_handler->install(['stable']);
       return;
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index bb82d4b19f..0c220f9ec3 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -956,7 +956,7 @@ function system_check_directory($form_element, FormStateInterface $form_state) {
  *   array is returned.
  *
  * @see system_rebuild_module_data()
- * @see \Drupal\Core\Extension\ThemeHandlerInterface::rebuildThemeData()
+ * @see Drupal\Core\Extension\ThemeExtensionList::rebuildThemeData()
  */
 function system_get_info($type, $name = NULL) {
   if ($type == 'module') {
diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
index a8767e92d5..76163ac504 100644
--- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
@@ -290,7 +290,7 @@ public function testModuleStreamWrappers() {
    */
   public function testThemeMetaData() {
     // Generate the list of available themes.
-    $themes = \Drupal::service('theme_handler')->rebuildThemeData();
+    $themes = \Drupal::service('extension.list.theme')->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/update/tests/src/Functional/UpdateContribTest.php b/core/modules/update/tests/src/Functional/UpdateContribTest.php
index 20d397cd48..e1b67cef8c 100644
--- a/core/modules/update/tests/src/Functional/UpdateContribTest.php
+++ b/core/modules/update/tests/src/Functional/UpdateContribTest.php
@@ -312,7 +312,7 @@ public function testUpdateHiddenBaseTheme() {
     ];
     $this->config('update_test.settings')->set('system_info', $system_info)->save();
     $projects = \Drupal::service('update.manager')->getProjects();
-    $theme_data = \Drupal::service('theme_handler')->rebuildThemeData();
+    $theme_data = \Drupal::service('extension.list.theme')->rebuildThemeData();
     $project_info = new ProjectInfo();
     $project_info->processInfoList($projects, $theme_data, 'theme', TRUE);
 
