diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php
index e42058e..9b97cca 100644
--- a/core/modules/views/src/Entity/View.php
+++ b/core/modules/views/src/Entity/View.php
@@ -266,29 +266,10 @@ public function calculateDependencies() {
 
     $executable = $this->getExecutable();
     $executable->initDisplay();
-    $handler_types = array_keys(Views::getHandlerTypes());
 
     foreach ($executable->displayHandlers as $display) {
-      // Add dependency for the display itself.
+      // Calculate the dependencies each display has.
       $this->calculatePluginDependencies($display);
-
-      // Collect all dependencies of all handlers.
-      foreach ($handler_types as $handler_type) {
-        foreach ($display->getHandlers($handler_type) as $handler) {
-          $this->calculatePluginDependencies($handler);
-        }
-      }
-
-      // Collect all dependencies of plugins.
-      foreach (Views::getPluginTypes('plugin') as $plugin_type) {
-        // Argument validator/default plugins do not return a plugin.
-        // @todo https://www.drupal.org/node/2368767 Calculate argument
-        //   validator/default plugin dependencies.
-        if (!$plugin = $display->getPlugin($plugin_type)) {
-          continue;
-        }
-        $this->calculatePluginDependencies($plugin);
-      }
     }
 
     return $this->dependencies;
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index 61c9e84..488323d 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -7,11 +7,13 @@
 
 namespace Drupal\views\Plugin\views\display;
 
+use Drupal\Component\Plugin\DependentPluginInterface;
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Plugin\PluginDependencyTrait;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Theme\Registry;
 use Drupal\Core\Url;
@@ -48,7 +50,8 @@
 /**
  * Base class for views display plugins.
  */
-abstract class DisplayPluginBase extends PluginBase {
+abstract class DisplayPluginBase extends PluginBase implements DependentPluginInterface {
+  use PluginDependencyTrait;
 
   /**
    * The top object of a view.
@@ -967,6 +970,69 @@ public function &getHandlers($type) {
   }
 
   /**
+   * Gets all the handlers used by the display.
+   *
+   * @param bool $only_overrides
+   *   Whether to include only overridden handlers.
+   *
+   * @return \Drupal\views\Plugin\views\ViewsHandlerInterface[]
+   */
+  protected function getAllHandlers($only_overrides = FALSE) {
+    $handler_types = Views::getHandlerTypes();
+    $handlers = [];
+    // Collect all dependencies of all handlers.
+    foreach ($handler_types as $handler_type => $handler_type_info) {
+      if ($only_overrides && $this->isDefaulted($handler_type_info['plural'])) {
+        continue;
+      }
+      $handlers = array_merge($handlers, $this->getHandlers($handler_type));
+    }
+    return $handlers;
+  }
+
+  /**
+   * Gets all the plugins used by the display.
+   *
+   * @param bool $only_overrides
+   *   Whether to include only overridden plugins.
+   *
+   * @return \Drupal\views\Plugin\views\ViewsHandlerInterface[]
+   */
+  protected function getAllPlugins($only_overrides = FALSE) {
+    $plugins = [];
+    // Collect all dependencies of plugins.
+    foreach (Views::getPluginTypes('plugin') as $plugin_type) {
+      $plugin = $this->getPlugin($plugin_type);
+      if (!$plugin) {
+        continue;
+      }
+      if ($only_overrides && $this->isDefaulted($plugin_type)) {
+        continue;
+      }
+      $plugins[] = $plugin;
+    }
+    return $plugins;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $this->addDependencies(parent::calculateDependencies());
+    // Collect all dependencies of all handlers.
+    foreach ($this->getAllHandlers(TRUE) as $handler) {
+      $this->calculatePluginDependencies($handler);
+    }
+
+    // Collect all dependencies of plugins.
+    foreach ($this->getAllPlugins(TRUE) as $plugin) {
+      $this->calculatePluginDependencies($plugin);
+    }
+    return $this->dependencies;
+  }
+
+
+  /**
    * Retrieves a list of fields for the current display.
    *
    * This also takes into account any associated relationships, if they exist.
