From 9ac1406a51d2bc6fd391be277636871c558af3c1 Mon Sep 17 00:00:00 2001
From: Daniel Wehner <daniel.wehner@erdfisch.de>
Date: Sat, 28 Jul 2012 18:20:10 -0500
Subject: [PATCH] annotationasation: Convert basically every core plugin.

---
 includes/cache.inc                            |  30 +-
 includes/handlers.inc                         |   3 +-
 includes/plugins.inc                          | 413 +-----------------
 .../Plugins/Type/AccessPluginManager.php      |   3 +-
 .../Type/ArgumentValidatorPluginManager.php   |   3 +-
 .../views/Plugins/Type/CachePluginManager.php |   5 +-
 .../Type/DisplayExtenderPluginManager.php     |   6 +-
 .../Plugins/Type/DisplayPluginManager.php     |   5 +-
 .../Plugins/Type/ExposedFormPluginManager.php |   5 +-
 .../Type/LocalizationPluginManager.php        |   5 +-
 .../views/Plugins/Type/PagerPluginManager.php |   5 +-
 .../views/Plugins/Type/QueryPluginManager.php |   4 +-
 .../views/Plugins/Type/RowPluginManager.php   |   4 +-
 .../views/Plugins/Type/StylePluginManager.php |   4 +-
 .../views/Plugins/Type/WizardManager.php      |   4 +-
 lib/Drupal/views/Plugins/views/Plugin.php     |   4 +-
 .../views/Plugins/views/access/None.php       |  12 +
 .../views/Plugins/views/access/Permission.php |  13 +
 .../views/Plugins/views/access/Role.php       |  13 +
 .../views/argument/ArgumentPluginBase.php     |   4 +-
 .../Plugins/views/argument_default/Fixed.php  |  10 +
 .../Plugins/views/argument_default/Php.php    |  10 +
 .../Plugins/views/argument_default/Raw.php    |  10 +
 .../views/argument_validator/Numeric.php      |  10 +
 .../Plugins/views/argument_validator/Php.php  |  10 +
 lib/Drupal/views/Plugins/views/cache/None.php |  12 +
 lib/Drupal/views/Plugins/views/cache/Time.php |  13 +
 .../Plugins/views/display/Attachment.php      |  18 +
 .../views/Plugins/views/display/Block.php     |  20 +
 .../Plugins/views/display/DefaultDisplay.php  |  19 +
 .../views/display/DisplayPluginBase.php       |  69 +--
 .../views/Plugins/views/display/Embed.php     |  20 +
 .../views/Plugins/views/display/Feed.php      |  16 +
 .../views/Plugins/views/display/Page.php      |  20 +
 .../DefaultDisplayExtender.php                |  18 +
 .../DisplayExtenderPluginBase.php             |   6 +-
 .../Plugins/views/exposed_form/Basic.php      |  13 +
 .../views/exposed_form/InputRequired.php      |  13 +
 .../views/filter/BooleanOperatorString.php    |   4 +-
 .../views/Plugins/views/localization/Core.php |  12 +
 .../views/Plugins/views/localization/None.php |  12 +
 lib/Drupal/views/Plugins/views/pager/Full.php |  14 +
 lib/Drupal/views/Plugins/views/pager/Mini.php |  14 +
 lib/Drupal/views/Plugins/views/pager/None.php |  14 +
 lib/Drupal/views/Plugins/views/pager/Some.php |  14 +
 lib/Drupal/views/Plugins/views/query/Sql.php  |   9 +
 lib/Drupal/views/Plugins/views/row/Fields.php |  16 +
 .../views/Plugins/views/row/RssFields.php     |  16 +
 lib/Drupal/views/Plugins/views/sort/Date.php  |   2 +-
 .../Plugins/views/sort/GroupByNumeric.php     |   2 +-
 .../Plugins/views/sort/MenuHierarchy.php      |   2 +-
 .../views/Plugins/views/sort/Random.php       |   2 +-
 .../Plugins/views/style/DefaultStyle.php      |  18 +
 ...mmaryPluginBase.php => DefaultSummary.php} |  18 +-
 lib/Drupal/views/Plugins/views/style/Grid.php |  18 +
 .../views/style/{List.php => HtmlList.php}    |  19 +-
 .../views/Plugins/views/style/JumpMenu.php    |  17 +
 .../Plugins/views/style/JumpMenuSummary.php   |  17 +-
 lib/Drupal/views/Plugins/views/style/Rss.php  |  16 +
 .../Plugins/views/style/StylePluginBase.php   |  10 +-
 .../views/Plugins/views/style/Table.php       |  18 +
 .../views/style/UnformattedSummary.php        |  17 +-
 .../views/Plugins/views/wizard/Comment.php    |  37 ++
 .../views/Plugins/views/wizard/File.php       |  16 +
 .../views/Plugins/views/wizard/Node.php       |  36 ++
 .../Plugins/views/wizard/NodeRevision.php     |  37 ++
 .../Plugins/views/wizard/TaxonomyTerm.php     |  20 +
 .../views/Plugins/views/wizard/Users.php      |  31 ++
 lib/Drupal/views/Tests/TranslatableTest.php   |   2 +-
 modules/comment.views.inc                     |  39 --
 modules/comment.views_default.inc             |   4 +-
 modules/node.views.inc                        |  65 +--
 modules/search.views_default.inc              |   4 +-
 modules/statistics.views_default.inc          |   4 +-
 views.api.php                                 |  23 +-
 views.module                                  |  84 ++--
 76 files changed, 891 insertions(+), 664 deletions(-)
 create mode 100644 lib/Drupal/views/Plugins/views/display_extender/DefaultDisplayExtender.php
 rename lib/Drupal/views/Plugins/views/style/{StyleSummaryPluginBase.php => DefaultSummary.php} (83%)
 rename lib/Drupal/views/Plugins/views/style/{List.php => HtmlList.php} (76%)

diff --git a/includes/cache.inc b/includes/cache.inc
index d4ec484f5326..60c242b3012f 100644
--- a/includes/cache.inc
+++ b/includes/cache.inc
@@ -86,32 +86,14 @@ function _views_data_process_entity_types(&$data) {
 /**
  * Fetch the plugin data from cache.
  */
-function _views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
-  static $cache = NULL;
-  if (!isset($cache) || $reset) {
-    $start = microtime(TRUE);
-    views_include('plugins');
-    views_include_handlers();
-
-    $cache = views_discover_plugins();
-
-  }
-
-  if (!$type && !$plugin) {
-    return $cache;
-  }
-  elseif (!$plugin) {
-    // Not in the if above so the else below won't run
-    if (isset($cache[$type])) {
-      return $cache[$type];
-    }
+function _views_fetch_plugin_data($type = NULL, $plugin_id = NULL, $reset = FALSE) {
+  $manager = views_get_plugin_manager($type);
+  if (!$plugin_id) {
+    return $manager->getDefinitions();
   }
-  elseif (isset($cache[$type][$plugin])) {
-    return $cache[$type][$plugin];
+  else {
+    return $manager->getDefinition($plugin_id);
   }
-
-  // Return an empty array if there is no match.
-  return array();
 }
 
 /**
diff --git a/includes/handlers.inc b/includes/handlers.inc
index 749d4a819245..4796ffc4a18b 100644
--- a/includes/handlers.inc
+++ b/includes/handlers.inc
@@ -20,11 +20,12 @@
  */
 function _views_create_plugin($type, $plugin_id, $definition) {
   $manager = views_get_plugin_manager($type);
+
   $instance = $manager->createInstance($plugin_id);
 
   $instance->is_plugin = TRUE;
   $instance->plugin_type = $type;
-  $instance->plugin_name = $definition['name'];
+  $instance->plugin_name = $plugin_id;
 
   $instance->set_definition($definition);
 
diff --git a/includes/plugins.inc b/includes/plugins.inc
index a6a2720ca00c..8e72578c8c7c 100644
--- a/includes/plugins.inc
+++ b/includes/plugins.inc
@@ -7,402 +7,6 @@
 
 use Drupal\views\ViewsObject;
 
-/**
- * Implements hook_views_plugins().
- */
-function views_views_plugins() {
-  $js_path = drupal_get_path('module', 'ctools') . '/js';
-  $plugins = array(
-    // display, style, row, argument default, argument validator and access.
-    'display' => array(
-      // Default settings for all display plugins.
-      'default' => array(
-        'title' => t('Master'),
-        'help' => t('Default settings for this view.'),
-        'class' => 'Drupal\views\Plugins\views\display\DefaultDisplay',
-        'theme' => 'views_view',
-        'no ui' => TRUE,
-        'no remove' => TRUE,
-        // @todo: replace this with proper libraries.
-        // @TODO: figure out whether this is still needed, or at least remove depedent.js.
-        'js' => array('core/misc/form.js', 'core/misc/collapse.js', 'core/misc/textarea.js', 'core/misc/tabledrag.js', 'core/misc/autocomplete.js', "$js_path/dependent.js"),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'help topic' => 'display-default',
-      ),
-      'page' => array(
-        'title' => t('Page'),
-        'help' => t('Display the view as a page, with a URL and menu links.'),
-        'class' => 'Drupal\views\Plugins\views\display\Page',
-        'theme' => 'views_view',
-        'uses hook menu' => TRUE,
-        'contextual links locations' => array('page'),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'admin' => t('Page'),
-        'help topic' => 'display-page',
-      ),
-      'block' => array(
-        'title' => t('Block'),
-        'help' => t('Display the view as a block.'),
-        'class' => 'Drupal\views\Plugins\views\display\Block',
-        'theme' => 'views_view',
-        'uses hook block' => TRUE,
-        'contextual links locations' => array('block'),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'admin' => t('Block'),
-        'help topic' => 'display-block',
-      ),
-      'attachment' => array(
-        'title' => t('Attachment'),
-        'help' => t('Attachments added to other displays to achieve multiple views in the same view.'),
-        'class' => 'Drupal\views\Plugins\views\display\Attachment',
-        'theme' => 'views_view',
-        'contextual links locations' => array(),
-        'use ajax' => TRUE,
-        'use pager' => FALSE,
-        'use more' => TRUE,
-        'accept attachments' => FALSE,
-        'help topic' => 'display-attachment',
-      ),
-      'feed' => array(
-        'title' => t('Feed'),
-        'help' => t('Display the view as a feed, such as an RSS feed.'),
-        'class' => 'Drupal\views\Plugins\views\display\Feed',
-        'uses hook menu' => TRUE,
-        'use ajax' => FALSE,
-        'use pager' => FALSE,
-        'accept attachments' => FALSE,
-        'admin' => t('Feed'),
-        'help topic' => 'display-feed',
-      ),
-      'embed' => array(
-        'title' => t('Embed'),
-        'help' => t('Provide a display which can be embedded using the views api.'),
-        'class' => 'Drupal\views\Plugins\views\display\Embed',
-        'theme' => 'views_view',
-        'uses hook menu' => FALSE,
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'accept attachments' => FALSE,
-        'admin' => t('Embed'),
-        'no ui' => !config('views.settings')->get('views_ui_display_embed'),
-      ),
-    ),
-    'display_extender' => array(
-      // Default settings for all display_extender plugins.
-      'default' => array(
-        'title' => t('Empty display extender'),
-        'help' => t('Default settings for this view.'),
-        'class' => 'Drupal\views\Plugins\views\display_extender\DisplayExtenderPluginBase',
-        // You can force the plugin to be enabled
-        'enabled' => FALSE,
-        'no ui' => TRUE,
-      ),
-    ),
-    'style' => array(
-      // Default settings for all style plugins.
-      'default' => array(
-        'title' => t('Unformatted list'),
-        'help' => t('Displays rows one after another.'),
-        'class' => 'Drupal\views\Plugins\views\style\DefaultStyle',
-        'theme' => 'views_view_unformatted',
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses grouping' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-unformatted',
-      ),
-      'list' => array(
-        'title' => t('HTML list'),
-        'help' => t('Displays rows as an HTML list.'),
-        'class' => 'Drupal\views\Plugins\views\style\List',
-        'theme' => 'views_view_list',
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-list',
-      ),
-      'grid' => array(
-        'title' => t('Grid'),
-        'help' => t('Displays rows in a grid.'),
-        'class' => 'Drupal\views\Plugins\views\style\Grid',
-        'theme' => 'views_view_grid',
-        'uses fields' => FALSE,
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-grid',
-      ),
-      'table' => array(
-        'title' => t('Table'),
-        'help' => t('Displays rows in a table.'),
-        'class' => 'Drupal\views\Plugins\views\style\Table',
-        'theme' => 'views_view_table',
-        'uses row plugin' => FALSE,
-        'uses row class' => TRUE,
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-table',
-      ),
-      'default_summary' => array(
-        'title' => t('List'),
-        'help' => t('Displays the default summary as a list.'),
-        'class' => 'Drupal\views\Plugins\views\style\StyleSummaryPluginBase',
-        'theme' => 'views_view_summary',
-        'type' => 'summary', // only shows up as a summary style
-        'uses options' => TRUE,
-        'help topic' => 'style-summary',
-      ),
-      'unformatted_summary' => array(
-        'title' => t('Unformatted'),
-        'help' => t('Displays the summary unformatted, with option for one after another or inline.'),
-        'class' => 'Drupal\views\Plugins\views\style\UnformattedSummary',
-        'theme' => 'views_view_summary_unformatted',
-        'type' => 'summary', // only shows up as a summary style
-        'uses options' => TRUE,
-        'help topic' => 'style-summary-unformatted',
-      ),
-      'rss' => array(
-        'title' => t('RSS Feed'),
-        'help' => t('Generates an RSS feed from a view.'),
-        'class' => 'Drupal\views\Plugins\views\style\Rss',
-        'theme' => 'views_view_rss',
-        'uses row plugin' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-rss',
-      ),
-    ),
-    'row' => array(
-      'fields' => array(
-        'title' => t('Fields'),
-        'help' => t('Displays the fields with an optional template.'),
-        'class' => 'Drupal\views\Plugins\views\row\Fields',
-        'theme' => 'views_view_fields',
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-row-fields',
-      ),
-      'rss_fields' => array(
-        'title' => t('Fields'),
-        'help' => t('Display fields as RSS items.'),
-        'class' => 'Drupal\views\Plugins\views\row\RssFields',
-        'theme' => 'views_view_row_rss',
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-row-fields',
-      ),
-    ),
-    'argument default' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\argument_default\ArgumentDefaultPluginBase',
-        'parent' => '',
-      ),
-      'fixed' => array(
-        'title' => t('Fixed value'),
-        'class' => 'Drupal\views\Plugins\views\argument_default\Fixed',
-      ),
-      'php' => array(
-        'title' => t('PHP Code'),
-        'class' => 'Drupal\views\Plugins\views\argument_default\Fixed',
-      ),
-      'raw' => array(
-        'title' => t('Raw value from URL'),
-        'class' => 'Drupal\views\Plugins\views\argument_default\Raw',
-      ),
-    ),
-    'argument validator' => array(
-      'php' => array(
-        'title' => t('PHP Code'),
-        'class' => 'Drupal\views\Plugins\views\argument_validator\Php',
-      ),
-      'numeric' => array(
-        'title' => t('Numeric'),
-        'class' => 'Drupal\views\Plugins\views\argument_validator\Numeric',
-      ),
-    ),
-    'access' => array(
-      'none' => array(
-        'title' => t('None'),
-        'help' => t('Will be available to all users.'),
-        'class' => 'Drupal\views\Plugins\views\access\None',
-        'help topic' => 'access-none',
-      ),
-      'role' => array(
-        'title' => t('Role'),
-        'help' => t('Access will be granted to users with any of the specified roles.'),
-        'class' => 'Drupal\views\Plugins\views\access\Role',
-        'uses options' => TRUE,
-        'help topic' => 'access-role',
-      ),
-      'perm' => array(
-        'title' => t('Permission'),
-        'help' => t('Access will be granted to users with the specified permission string.'),
-        'class' => 'Drupal\views\Plugins\views\access\Permission',
-        'uses options' => TRUE,
-        'help topic' => 'access-perm',
-      ),
-    ),
-    'query' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\query\QueryPlugin',
-        'parent' => '',
-      ),
-      'views_query' => array(
-        'title' => t('SQL Query'),
-        'help' => t('Query will be generated and run using the Drupal database API.'),
-        'class' => 'views_plugin_query_default',
-        'class' => 'Drupal\views\Plugins\views\query\Sql',
-      ),
-    ),
-    'cache' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\cache\CachePluginBase',
-        'parent' => '',
-      ),
-      'none' => array(
-        'title' => t('None'),
-        'help' => t('No caching of Views data.'),
-        'class' => 'Drupal\views\Plugins\views\cache\None',
-        'help topic' => 'cache-none',
-      ),
-      'time' => array(
-        'title' => t('Time-based'),
-        'help' => t('Simple time-based caching of data.'),
-        'class' => 'Drupal\views\Plugins\views\cache\Time',
-        'uses options' => TRUE,
-        'help topic' => 'cache-time',
-      ),
-    ),
-    'exposed_form' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\exposed_form\ExposedFormPluginBase',
-        'parent' => '',
-      ),
-      'basic' => array(
-        'title' => t('Basic'),
-        'help' => t('Basic exposed form'),
-        'class' => 'Drupal\views\Plugins\views\exposed_form\Basic',
-        'uses options' => TRUE,
-        'help topic' => 'exposed-form-basic',
-      ),
-      'input_required' => array(
-        'title' => t('Input required'),
-        'help' => t('An exposed form that only renders a view if the form contains user input.'),
-        'class' => 'Drupal\views\Plugins\views\exposed_form\InputRequired',
-        'uses options' => TRUE,
-        'help topic' => 'exposed-form-input-required',
-      ),
-    ),
-    'pager' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\pager\PagerPluginBase',
-        'parent' => '',
-      ),
-      'none' => array(
-        'title' => t('Display all items'),
-        'help' => t("Display all items that this view might find"),
-        'class' => 'Drupal\views\Plugins\views\pager\None',
-        'help topic' => 'pager-none',
-        'uses options' => TRUE,
-        'type' => 'basic',
-      ),
-      'some' => array(
-        'title' => t('Display a specified number of items'),
-        'help' => t('Display a limited number items that this view might find.'),
-        'class' => 'Drupal\views\Plugins\views\pager\Some',
-        'help topic' => 'pager-some',
-        'uses options' => TRUE,
-        'type' => 'basic',
-      ),
-      'full' => array(
-        'title' => t('Paged output, full pager'),
-        'short title' => t('Full'),
-        'help' => t('Paged output, full Drupal style'),
-        'class' => 'Drupal\views\Plugins\views\pager\Full',
-        'help topic' => 'pager-full',
-        'uses options' => TRUE,
-      ),
-      'mini' => array(
-        'title' => t('Paged output, mini pager'),
-        'short title' => t('Mini'),
-        'help' => t('Use the mini pager output.'),
-        'class' => 'Drupal\views\Plugins\views\pager\Mini',
-        'help topic' => 'pager-mini',
-        'uses options' => TRUE,
-        'parent' => 'full',
-      ),
-    ),
-    'localization' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'class' => 'Drupal\views\Plugins\views\localization\LocalizationPluginBase',
-        'parent' => '',
-      ),
-     'none' => array(
-        'title' => t('None'),
-        'help' => t('Do not pass admin strings for translation.'),
-        'class' => 'Drupal\views\Plugins\views\localization\None',
-        'help topic' => 'localization-none',
-      ),
-      'core' => array(
-        'title' => t('Core'),
-        'help' => t("Use Drupal core t() function. Not recommended, as it doesn't support updates to existing strings."),
-        'class' => 'Drupal\views\Plugins\views\localization\Core',
-        'help topic' => 'localization-core',
-      ),
-    ),
-  );
-  // Add a help message pointing to the i18views module if it is not present.
-  if (!module_exists('i18nviews')) {
-    $plugins['localization']['core']['help'] .= ' ' . t('If you need to translate Views labels into other languages, consider installing the <a href="!path">Internationalization</a> package\'s Views translation module.', array('!path' => url('http://drupal.org/project/i18n', array('absolute' => TRUE))));
-  }
-
-  if (module_invoke('ctools', 'api_version', '1.3')) {
-    $plugins['style']['jump_menu_summary'] = array(
-      'title' => t('Jump menu'),
-      'help' => t('Puts all of the results into a select box and allows the user to go to a different page based upon the results.'),
-      'class' => 'Drupal\views\Plugins\views\style\JumpMenuSummary',
-      'theme' => 'views_view_summary_jump_menu',
-      'type' => 'summary', // only shows up as a summary style
-      'uses options' => TRUE,
-      'help topic' => 'style-summary-jump-menu',
-    );
-    $plugins['style']['jump_menu'] = array(
-      'title' => t('Jump menu'),
-      'help' => t('Puts all of the results into a select box and allows the user to go to a different page based upon the results.'),
-      'class' => 'Drupal\views\Plugins\views\style\JumpMenu',
-      'theme' => 'views_view_jump_menu',
-      'uses row plugin' => TRUE,
-      'uses fields' => TRUE,
-      'uses options' => TRUE,
-      'type' => 'normal',
-      'help topic' => 'style-jump-menu',
-    );
-  }
-
-  return $plugins;
-}
-
 /**
  * Builds and return a list of all plugins available in the system.
  *
@@ -565,22 +169,9 @@ function summary_title() {
    * This appears on the ui beside each plugin and beside the settings link.
    */
   function plugin_title() {
-    if (isset($this->definition['short title'])) {
-      return check_plain($this->definition['short title']);
+    if (isset($this->definition['short_title'])) {
+      return check_plain($this->definition['short_title']);
     }
     return check_plain($this->definition['title']);
   }
 }
-
-/**
- * Get enabled display extenders.
- */
-function views_get_enabled_display_extenders() {
-  $enabled = array_filter((array) config('views.settings')->get('views_display_extenders'));
-  $options = views_fetch_plugin_names('display_extender');
-  foreach ($options as $name => $plugin) {
-    $enabled[$name] = $name;
-  }
-
-  return $enabled;
-}
diff --git a/lib/Drupal/views/Plugins/Type/AccessPluginManager.php b/lib/Drupal/views/Plugins/Type/AccessPluginManager.php
index 340e8b199b40..01f28ac5fe94 100644
--- a/lib/Drupal/views/Plugins/Type/AccessPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/AccessPluginManager.php
@@ -10,10 +10,11 @@
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
 use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class AccessPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'access');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'access');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/ArgumentValidatorPluginManager.php b/lib/Drupal/views/Plugins/Type/ArgumentValidatorPluginManager.php
index 518e81161fe9..bbad7df08707 100644
--- a/lib/Drupal/views/Plugins/Type/ArgumentValidatorPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/ArgumentValidatorPluginManager.php
@@ -10,10 +10,11 @@
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
 use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class ArgumentValidatorPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'argument validator');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'argument_validator');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/CachePluginManager.php b/lib/Drupal/views/Plugins/Type/CachePluginManager.php
index 36a83e0746f5..03eeb38b83ef 100644
--- a/lib/Drupal/views/Plugins/Type/CachePluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/CachePluginManager.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\views\Discovery\ViewsDiscovery;
+use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class CachePluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'cache');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'cache');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/DisplayExtenderPluginManager.php b/lib/Drupal/views/Plugins/Type/DisplayExtenderPluginManager.php
index ff0f131fcf1b..0b9fc1cb0211 100644
--- a/lib/Drupal/views/Plugins/Type/DisplayExtenderPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/DisplayExtenderPluginManager.php
@@ -9,11 +9,11 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\views\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
-class DisplayPluginManager extends PluginManagerBase {
+class DisplayExtenderPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'display_extender');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'display_extender');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/DisplayPluginManager.php b/lib/Drupal/views/Plugins/Type/DisplayPluginManager.php
index 1318e8d17e8e..efe69377f841 100644
--- a/lib/Drupal/views/Plugins/Type/DisplayPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/DisplayPluginManager.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
 
 class DisplayPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'display');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'display');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/ExposedFormPluginManager.php b/lib/Drupal/views/Plugins/Type/ExposedFormPluginManager.php
index 5761cb8c425d..dae62b989292 100644
--- a/lib/Drupal/views/Plugins/Type/ExposedFormPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/ExposedFormPluginManager.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
 
 class ExposedFormPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'exposed_form');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'exposed_form');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/LocalizationPluginManager.php b/lib/Drupal/views/Plugins/Type/LocalizationPluginManager.php
index 98f03360e12d..bed4066ece1b 100644
--- a/lib/Drupal/views/Plugins/Type/LocalizationPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/LocalizationPluginManager.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
 
 class LocalizationPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'localization');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'localization');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/PagerPluginManager.php b/lib/Drupal/views/Plugins/Type/PagerPluginManager.php
index 053a425be09a..a276f295b16b 100644
--- a/lib/Drupal/views/Plugins/Type/PagerPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/PagerPluginManager.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
 
 class PagerPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'pager');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'pager');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/QueryPluginManager.php b/lib/Drupal/views/Plugins/Type/QueryPluginManager.php
index 11579863bc5c..52b1e93a5c91 100644
--- a/lib/Drupal/views/Plugins/Type/QueryPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/QueryPluginManager.php
@@ -9,11 +9,11 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class QueryPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'query');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'query');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/RowPluginManager.php b/lib/Drupal/views/Plugins/Type/RowPluginManager.php
index e98cadf40493..2b66cb3e75e2 100644
--- a/lib/Drupal/views/Plugins/Type/RowPluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/RowPluginManager.php
@@ -9,11 +9,11 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class RowPluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'row');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'row');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/StylePluginManager.php b/lib/Drupal/views/Plugins/Type/StylePluginManager.php
index 103b1f9a45ac..a61b3e3d0a79 100644
--- a/lib/Drupal/views/Plugins/Type/StylePluginManager.php
+++ b/lib/Drupal/views/Plugins/Type/StylePluginManager.php
@@ -9,11 +9,11 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class StylePluginManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new ViewsDiscovery('views_plugins', 'style');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'style');
     $this->factory = new DefaultFactory($this);
   }
 }
diff --git a/lib/Drupal/views/Plugins/Type/WizardManager.php b/lib/Drupal/views/Plugins/Type/WizardManager.php
index 15bed32d2479..f04e93bfca2f 100644
--- a/lib/Drupal/views/Plugins/Type/WizardManager.php
+++ b/lib/Drupal/views/Plugins/Type/WizardManager.php
@@ -9,11 +9,11 @@
 
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\views\Plugins\Discovery\WizardDiscovery;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 
 class WizardManager extends PluginManagerBase {
   public function __construct() {
-    $this->discovery = new WizardDiscovery('views_wizard');
+    $this->discovery = new AnnotatedClassDiscovery('views', 'wizard');
     $this->factory = new DefaultFactory($this->discovery);
   }
 }
diff --git a/lib/Drupal/views/Plugins/views/Plugin.php b/lib/Drupal/views/Plugins/views/Plugin.php
index 60a9c9a7aa0e..50bb553bfa3a 100644
--- a/lib/Drupal/views/Plugins/views/Plugin.php
+++ b/lib/Drupal/views/Plugins/views/Plugin.php
@@ -434,8 +434,8 @@ function summary_title() {
    * This appears on the ui beside each plugin and beside the settings link.
    */
   function plugin_title() {
-    if (isset($this->definition['short title'])) {
-      return check_plain($this->definition['short title']);
+    if (isset($this->definition['short_title'])) {
+      return check_plain($this->definition['short_title']);
     }
     return check_plain($this->definition['title']);
   }
diff --git a/lib/Drupal/views/Plugins/views/access/None.php b/lib/Drupal/views/Plugins/views/access/None.php
index 4fb2709e9e63..b9bdc4bfc64e 100644
--- a/lib/Drupal/views/Plugins/views/access/None.php
+++ b/lib/Drupal/views/Plugins/views/access/None.php
@@ -7,11 +7,23 @@
 
 namespace Drupal\views\Plugins\views\access;
 
+use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Access plugin that provides no access control at all.
  *
  * @ingroup views_access_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("Will be available to all users."),
+ *   help_topic = "access-none"
+ * )
+ */
 class None extends AccessPluginBase {
   function summary_title() {
     return t('Unrestricted');
diff --git a/lib/Drupal/views/Plugins/views/access/Permission.php b/lib/Drupal/views/Plugins/views/access/Permission.php
index ad1a15ab3e47..60e0a8530791 100644
--- a/lib/Drupal/views/Plugins/views/access/Permission.php
+++ b/lib/Drupal/views/Plugins/views/access/Permission.php
@@ -7,11 +7,24 @@
 
 namespace Drupal\views\Plugins\views\access;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Access plugin that provides permission-based access control.
  *
  * @ingroup views_access_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "permission",
+ *   title = @Translation("Permission"),
+ *   help = @Translation("Access will be granted to users with the specified permission string."),
+ *   help_topic = "access-perm",
+ *   uses_options = TRUE
+ * )
+ */
 class Permission extends AccessPluginBase {
   function access($account) {
     return views_check_perm($this->options['perm'], $account);
diff --git a/lib/Drupal/views/Plugins/views/access/Role.php b/lib/Drupal/views/Plugins/views/access/Role.php
index 2798d393a544..5df5e23d20f4 100644
--- a/lib/Drupal/views/Plugins/views/access/Role.php
+++ b/lib/Drupal/views/Plugins/views/access/Role.php
@@ -7,11 +7,24 @@
 
 namespace Drupal\views\Plugins\views\access;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Access plugin that provides role-based access control.
  *
  * @ingroup views_access_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "role",
+ *   title = @Translation("Role"),
+ *   help = @Translation("Access will be granted to users with any of the specified roles."),
+ *   help_topic = "access-role",
+ *   uses_options = TRUE
+ * )
+ */
 class Role extends AccessPluginBase {
   function access($account) {
     return views_check_roles(array_filter($this->options['role']), $account);
diff --git a/lib/Drupal/views/Plugins/views/argument/ArgumentPluginBase.php b/lib/Drupal/views/Plugins/views/argument/ArgumentPluginBase.php
index 41662bf28f68..318197541727 100644
--- a/lib/Drupal/views/Plugins/views/argument/ArgumentPluginBase.php
+++ b/lib/Drupal/views/Plugins/views/argument/ArgumentPluginBase.php
@@ -367,7 +367,7 @@ function options_form(&$form, &$form_state) {
     $validate_types = array('none' => t('- Basic validation -'));
     $plugins = views_fetch_plugin_data('argument validator');
     foreach ($plugins as $id => $info) {
-      if (!empty($info['no ui'])) {
+      if (!empty($info['no_ui'])) {
         continue;
       }
 
@@ -588,7 +588,7 @@ function default_argument_form(&$form, &$form_state) {
     );
 
     foreach ($plugins as $id => $info) {
-      if (!empty($info['no ui'])) {
+      if (!empty($info['no_ui'])) {
         continue;
       }
       $plugin = $this->get_plugin('argument default', $id);
diff --git a/lib/Drupal/views/Plugins/views/argument_default/Fixed.php b/lib/Drupal/views/Plugins/views/argument_default/Fixed.php
index a064b46e43b9..97b1394594a9 100644
--- a/lib/Drupal/views/Plugins/views/argument_default/Fixed.php
+++ b/lib/Drupal/views/Plugins/views/argument_default/Fixed.php
@@ -7,11 +7,21 @@
 
 namespace Drupal\views\Plugins\views\argument_default;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The fixed argument default handler.
  *
  * @ingroup views_argument_default_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "fixed",
+ *   title = @Translation("Fixed"),
+ * )
+ */
 class Fixed extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/argument_default/Php.php b/lib/Drupal/views/Plugins/views/argument_default/Php.php
index ec8bd3ba981c..a72e69fbf2f0 100644
--- a/lib/Drupal/views/Plugins/views/argument_default/Php.php
+++ b/lib/Drupal/views/Plugins/views/argument_default/Php.php
@@ -7,11 +7,21 @@
 
 namespace Drupal\views\Plugins\views\argument_default;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default argument plugin to provide a PHP code block.
  *
  * @ingroup views_argument_default_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "php",
+ *   title = @Translation("PHP Code")
+ * )
+ */
 class Php extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/argument_default/Raw.php b/lib/Drupal/views/Plugins/views/argument_default/Raw.php
index 5a9ea983a1e1..c3208637656b 100644
--- a/lib/Drupal/views/Plugins/views/argument_default/Raw.php
+++ b/lib/Drupal/views/Plugins/views/argument_default/Raw.php
@@ -7,11 +7,21 @@
 
 namespace Drupal\views\Plugins\views\argument_default;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default argument plugin to use the raw value from the URL.
  *
  * @ingroup views_argument_default_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "raw",
+ *   title = @Translation("Raw value from URL")
+ * )
+ */
 class Raw extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/argument_validator/Numeric.php b/lib/Drupal/views/Plugins/views/argument_validator/Numeric.php
index b804a6f5df2f..e15b0ea0adf6 100644
--- a/lib/Drupal/views/Plugins/views/argument_validator/Numeric.php
+++ b/lib/Drupal/views/Plugins/views/argument_validator/Numeric.php
@@ -7,11 +7,21 @@
 
 namespace Drupal\views\Plugins\views\argument_validator;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Validate whether an argument is numeric or not.
  *
  * @ingroup views_argument_validate_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "numeric",
+ *   title = @Translation("Numeric"),
+ * )
+ */
 class Numeric extends ArgumentValidatorPluginBase {
   function validate_argument($argument) {
     return is_numeric($argument);
diff --git a/lib/Drupal/views/Plugins/views/argument_validator/Php.php b/lib/Drupal/views/Plugins/views/argument_validator/Php.php
index 7dec0c8699b5..133f6b0ef184 100644
--- a/lib/Drupal/views/Plugins/views/argument_validator/Php.php
+++ b/lib/Drupal/views/Plugins/views/argument_validator/Php.php
@@ -7,11 +7,21 @@
 
 namespace Drupal\views\Plugins\views\argument_validator;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Provide PHP code to validate whether or not an argument is ok.
  *
  * @ingroup views_argument_validate_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "php",
+ *   title = @Translation("PHP Code"),
+ * )
+ */
 class Php extends ArgumentValidatorPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/cache/None.php b/lib/Drupal/views/Plugins/views/cache/None.php
index dddf7cf00e42..076ac137fbc4 100644
--- a/lib/Drupal/views/Plugins/views/cache/None.php
+++ b/lib/Drupal/views/Plugins/views/cache/None.php
@@ -7,11 +7,23 @@
 
 namespace Drupal\views\Plugins\views\cache;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Caching plugin that provides no caching at all.
  *
  * @ingroup views_cache_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("No caching of Views data."),
+ *   help_topic = "cache-none"
+ * )
+ */
 class None extends CachePluginBase {
   function cache_start() { /* do nothing */ }
 
diff --git a/lib/Drupal/views/Plugins/views/cache/Time.php b/lib/Drupal/views/Plugins/views/cache/Time.php
index e19d91dcc868..ac581b700fff 100644
--- a/lib/Drupal/views/Plugins/views/cache/Time.php
+++ b/lib/Drupal/views/Plugins/views/cache/Time.php
@@ -7,11 +7,24 @@
 
 namespace Drupal\views\Plugins\views\cache;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Simple caching of query results for Views displays.
  *
  * @ingroup views_cache_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "time",
+ *   title = @Translation("Time-based"),
+ *   help = @Translation("Simple time-based caching of data."),
+ *   help_topic = "cache-time",
+ *   uses_options = TRUE
+ * )
+ */
 class Time extends CachePluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/display/Attachment.php b/lib/Drupal/views/Plugins/views/display/Attachment.php
index 06b41989412b..158e2918080a 100644
--- a/lib/Drupal/views/Plugins/views/display/Attachment.php
+++ b/lib/Drupal/views/Plugins/views/display/Attachment.php
@@ -7,6 +7,9 @@
 
 namespace Drupal\views\Plugins\views\display;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles an attachment display.
  *
@@ -16,6 +19,21 @@
  *
  * @ingroup views_display_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "attachment",
+ *   title = @Translation("Attachment"),
+ *   help = @Translation("Attachments added to other displays to achieve multiple views in the same view."),
+ *   theme = "views_view",
+ *   contextual_links_locations = {""},
+ *   use_ajax = TRUE,
+ *   use_pager = FALSE,
+ *   use_more = TRUE,
+ *   accept_attachments = FALSE,
+ *   help_topic = "display-attachment"
+ * )
+ */
 class Attachment extends DisplayPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/display/Block.php b/lib/Drupal/views/Plugins/views/display/Block.php
index 473ba1a7ae23..6d88e6bb46d7 100644
--- a/lib/Drupal/views/Plugins/views/display/Block.php
+++ b/lib/Drupal/views/Plugins/views/display/Block.php
@@ -7,11 +7,31 @@
 
 namespace Drupal\views\Plugins\views\display;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles a block.
  *
  * @ingroup views_display_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "block",
+ *   title = @Translation("Block"),
+ *   help = @Translation("Display the view as a block."),
+ *   theme = "views_view",
+ *   uses_hook_block = TRUE,
+ *   contextual_links_locations = {"block"},
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   admin = @Translation("Block"),
+ *   help_topic = "display-block"
+ * )
+ */
 class Block extends DisplayPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/display/DefaultDisplay.php b/lib/Drupal/views/Plugins/views/display/DefaultDisplay.php
index 6843242cb1b7..fda0af931d7b 100644
--- a/lib/Drupal/views/Plugins/views/display/DefaultDisplay.php
+++ b/lib/Drupal/views/Plugins/views/display/DefaultDisplay.php
@@ -7,11 +7,30 @@
 
 namespace Drupal\views\Plugins\views\display;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * A plugin to handle defaults on a view.
  *
  * @ingroup views_display_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "standard",
+ *   title = @Translation("Master"),
+ *   help = @Translation("Default settings for this view."),
+ *   theme = "views_view",
+ *   no_ui = TRUE,
+ *   no_remove = TRUE,
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   help_topic = "display-default"
+ * )
+ */
 class DefaultDisplay extends DisplayPluginBase {
   /**
    * Determine if this display is the 'default' display which contains
diff --git a/lib/Drupal/views/Plugins/views/display/DisplayPluginBase.php b/lib/Drupal/views/Plugins/views/display/DisplayPluginBase.php
index 7ce0cb6bd74a..cca15942879a 100644
--- a/lib/Drupal/views/Plugins/views/display/DisplayPluginBase.php
+++ b/lib/Drupal/views/Plugins/views/display/DisplayPluginBase.php
@@ -58,8 +58,7 @@ function init(&$view, &$display, $options = NULL) {
     // Load extenders as soon as possible.
     $this->extender = array();
     $extenders = views_get_enabled_display_extenders();
-    // If you update to the dev version the registry might not be loaded yet.
-    if (!empty($extenders) && class_exists('views_plugin_display_extender')) {
+    if (!empty($extenders)) {
       foreach ($extenders as $extender) {
         $plugin = views_get_plugin('display_extender', $extender);
         if ($plugin) {
@@ -390,10 +389,10 @@ function use_more_text() {
   }
 
   /**
-   * Can this display accept attachments?
+   * Can this display accept_attachments?
    */
   function accept_attachments() {
-    if (empty($this->definition['accept attachments'])) {
+    if (empty($this->definition['accept_attachments'])) {
       return FALSE;
     }
     if (!empty($this->view->argument) && $this->get_option('hide_attachment_summary')) {
@@ -1191,7 +1190,8 @@ function options_summary(&$categories, &$options) {
       'desc' => t('Change the title that this display will use.'),
     );
 
-    $style_plugin = views_fetch_plugin_data('style', $this->get_option('style_plugin'));
+    $manager = views_get_plugin_manager('style');
+    $style_plugin = $manager->getDefinition($this->get_option('style_plugin'));
     $style_plugin_instance = $this->get_plugin('style');
     $style_summary = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->summary_title();
     $style_title = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->plugin_title();
@@ -1207,11 +1207,11 @@ function options_summary(&$categories, &$options) {
     );
 
     // This adds a 'Settings' link to the style_options setting if the style has options.
-    if (!empty($style_plugin['uses options'])) {
+    if (!empty($style_plugin['uses_options'])) {
       $options['style_plugin']['links']['style_options'] = t('Change settings for this format');
     }
 
-    if (!empty($style_plugin['uses row plugin'])) {
+    if (!empty($style_plugin['uses_row_plugin'])) {
       $row_plugin = views_fetch_plugin_data('row', $this->get_option('row_plugin'));
       $row_plugin_instance = $this->get_plugin('row');
       $row_summary = empty($row_plugin['title']) ? t('Missing style plugin') : $row_plugin_instance->summary_title();
@@ -1225,7 +1225,7 @@ function options_summary(&$categories, &$options) {
         'desc' => t('Change the way each row in the view is styled.'),
       );
       // This adds a 'Settings' link to the row_options setting if the row style has options.
-      if (!empty($row_plugin['uses options'])) {
+      if (!empty($row_plugin['uses_options'])) {
         $options['row_plugin']['links']['row_options'] = t('Change settings for this style');
       }
     }
@@ -1237,7 +1237,7 @@ function options_summary(&$categories, &$options) {
         'desc' => t('Change whether or not this display will use AJAX.'),
       );
     }
-    if (!empty($this->definition['accept attachments'])) {
+    if (!empty($this->definition['accept_attachments'])) {
       $options['hide_attachment_summary'] = array(
         'category' => 'other',
         'title' => t('Hide attachments in summary'),
@@ -1275,7 +1275,7 @@ function options_summary(&$categories, &$options) {
       $options['pager']['title'] = t('Items to display');
     }
 
-    if (!empty($pager_plugin->definition['uses options'])) {
+    if (!empty($pager_plugin->definition['uses_options'])) {
       $options['pager']['links']['pager_options'] = t('Change settings for this pager type.');
     }
 
@@ -1337,7 +1337,7 @@ function options_summary(&$categories, &$options) {
       'desc' => t('Specify access control type for this display.'),
     );
 
-    if (!empty($access_plugin->definition['uses options'])) {
+    if (!empty($access_plugin->definition['uses_options'])) {
       $options['access']['links']['access_options'] = t('Change settings for this access type.');
     }
 
@@ -1357,11 +1357,11 @@ function options_summary(&$categories, &$options) {
       'desc' => t('Specify caching type for this display.'),
     );
 
-    if (!empty($cache_plugin->definition['uses options'])) {
+    if (!empty($cache_plugin->definition['uses_options'])) {
       $options['cache']['links']['cache_options'] = t('Change settings for this caching type.');
     }
 
-    if (!empty($access_plugin->definition['uses options'])) {
+    if (!empty($access_plugin->definition['uses_options'])) {
       $options['access']['links']['access_options'] = t('Change settings for this access type.');
     }
 
@@ -1402,7 +1402,7 @@ function options_summary(&$categories, &$options) {
       'desc' => t('Select the kind of exposed filter to use.'),
     );
 
-    if (!empty($exposed_form_plugin->definition['uses options'])) {
+    if (!empty($exposed_form_plugin->definition['uses_options'])) {
       $options['exposed_form']['links']['exposed_form_options'] = t('Exposed form settings for this exposed form style.');
     }
 
@@ -1584,7 +1584,7 @@ function options_form(&$form, &$form_state) {
         );
 
         $access_plugin = views_fetch_plugin_data('access', $access['type']);
-        if (!empty($access_plugin['uses options'])) {
+        if (!empty($access_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#markup' => t('You may also adjust the !settings for the currently selected access restriction.', array('!settings' => $this->option_link(t('settings'), 'access_options'))),
@@ -1598,7 +1598,7 @@ function options_form(&$form, &$form_state) {
         $plugin = $this->get_plugin('access');
         $form['#title'] .= t('Access options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
           $form['#help_module'] = $plugin->definition['module'];
 
           $form['access_options'] = array(
@@ -1627,7 +1627,7 @@ function options_form(&$form, &$form_state) {
         );
 
         $cache_plugin = views_fetch_plugin_data('cache', $cache['type']);
-        if (!empty($cache_plugin['uses options'])) {
+        if (!empty($cache_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -1660,8 +1660,8 @@ function options_form(&$form, &$form_state) {
         $form['#title'] .= t('Query options');
         $this->view->init_query();
         if ($this->view->query) {
-          if (isset($this->view->query->definition['help topic'])) {
-            $form['#help_topic'] = $this->view->query->definition['help topic'];
+          if (isset($this->view->query->definition['help_topic'])) {
+            $form['#help_topic'] = $this->view->query->definition['help_topic'];
           }
 
           if (isset($this->view->query->definition['module'])) {
@@ -1725,6 +1725,7 @@ function options_form(&$form, &$form_state) {
         }
         break;
       case 'style_plugin':
+        $manager = views_get_plugin_manager('style');
         $form['#title'] .= t('How should this view be styled');
         $form['#help_topic'] = 'style';
         $form['style_plugin'] =  array(
@@ -1734,8 +1735,8 @@ function options_form(&$form, &$form_state) {
           '#description' => t('If the style you choose has settings, be sure to click the settings button that will appear next to it in the View summary.'),
         );
 
-        $style_plugin = views_fetch_plugin_data('style', $this->get_option('style_plugin'));
-        if (!empty($style_plugin['uses options'])) {
+        $style_plugin = $manager->getDefinition($this->get_option('style_plugin'));
+        if (!empty($style_plugin['uses_options'])) {
           $form['markup'] = array(
             '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected style.', array('!settings' => $this->option_link(t('settings'), 'style_options'))) . '</div>',
           );
@@ -1759,8 +1760,8 @@ function options_form(&$form, &$form_state) {
         }
         $plugin = $this->get_plugin(empty($style) ? 'row' : 'style');
         if ($plugin) {
-          if (isset($plugin->definition['help topic'])) {
-            $form['#help_topic'] = $plugin->definition['help topic'];
+          if (isset($plugin->definition['help_topic'])) {
+            $form['#help_topic'] = $plugin->definition['help_topic'];
             $form['#help_module'] = $plugin->definition['module'];
           }
           $form[$form_state['section']] = array(
@@ -1779,7 +1780,7 @@ function options_form(&$form, &$form_state) {
         );
 
         $row_plugin = views_fetch_plugin_data('row', $this->get_option('row_plugin'));
-        if (!empty($row_plugin['uses options'])) {
+        if (!empty($row_plugin['uses_options'])) {
           $form['markup'] = array(
             '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected row style.', array('!settings' => $this->option_link(t('settings'), 'row_options'))) . '</div>',
           );
@@ -2134,7 +2135,7 @@ function options_form(&$form, &$form_state) {
         );
 
         $exposed_form_plugin = views_fetch_plugin_data('exposed_form', $exposed_form['type']);
-        if (!empty($exposed_form_plugin['uses options'])) {
+        if (!empty($exposed_form_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -2146,7 +2147,7 @@ function options_form(&$form, &$form_state) {
         $plugin = $this->get_plugin('exposed_form');
         $form['#title'] .= t('Exposed form options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
 
           $form['exposed_form_options'] = array(
             '#tree' => TRUE,
@@ -2170,7 +2171,7 @@ function options_form(&$form, &$form_state) {
         );
 
         $pager_plugin = views_fetch_plugin_data('pager', $pager['type'], array($this->view->base_table));
-        if (!empty($pager_plugin['uses options'])) {
+        if (!empty($pager_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -2183,7 +2184,7 @@ function options_form(&$form, &$form_state) {
         $plugin = $this->get_plugin('pager');
         $form['#title'] .= t('Pager options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
 
           $form['pager_options'] = array(
             '#tree' => TRUE,
@@ -2329,7 +2330,7 @@ function options_submit(&$form, &$form_state) {
           if ($plugin) {
             $access = array('type' => $form_state['values']['access']['type']);
             $this->set_option('access', $access);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('access_options'));
             }
           }
@@ -2350,7 +2351,7 @@ function options_submit(&$form, &$form_state) {
           if ($plugin) {
             $cache = array('type' => $form_state['values']['cache']['type']);
             $this->set_option('cache', $cache);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('cache_options'));
             }
           }
@@ -2408,7 +2409,7 @@ function options_submit(&$form, &$form_state) {
             $this->set_option('row_options', array());
 
             // send ajax form to options page if we use it.
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('row_options'));
             }
           }
@@ -2423,7 +2424,7 @@ function options_submit(&$form, &$form_state) {
             $this->set_option($section, $form_state['values'][$section]);
             $this->set_option('style_options', array());
             // send ajax form to options page if we use it.
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('style_options'));
             }
           }
@@ -2449,7 +2450,7 @@ function options_submit(&$form, &$form_state) {
           if ($plugin) {
             $exposed_form = array('type' => $form_state['values']['exposed_form']['type'], 'options' => array());
             $this->set_option('exposed_form', $exposed_form);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('exposed_form_options'));
             }
           }
@@ -2476,7 +2477,7 @@ function options_submit(&$form, &$form_state) {
 
             $pager = array('type' => $form_state['values']['pager']['type'], 'options' => $plugin->options);
             $this->set_option('pager', $pager);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('pager_options'));
             }
           }
diff --git a/lib/Drupal/views/Plugins/views/display/Embed.php b/lib/Drupal/views/Plugins/views/display/Embed.php
index 74f169e4afbe..ccb14ebd1696 100644
--- a/lib/Drupal/views/Plugins/views/display/Embed.php
+++ b/lib/Drupal/views/Plugins/views/display/Embed.php
@@ -7,10 +7,30 @@
 
 namespace Drupal\views\Plugins\views\display;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles an embed display.
  *
  * @ingroup views_display_plugins
+ *
+ * @todo: Wait until annotations/plugins support access mehtods.
+ * no ui => !config('views.settings')->get('views_ui_display_embed'),
+ */
+
+/**
+ * @Plugin(
+ *   plugin_id = "embed",
+ *   title = @Translation("Embed"),
+ *   help = @Translation("Provide a display which can be embedded using the views api."),
+ *   theme = "views_view",
+ *   uses_hook_menu = FALSE,
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   accept_attachments = FALSE,
+ *   help_topic = "display-embed"
+ * )
  */
 class Embed extends DisplayPluginBase {
   // This display plugin does nothing apart from exist.
diff --git a/lib/Drupal/views/Plugins/views/display/Feed.php b/lib/Drupal/views/Plugins/views/display/Feed.php
index 178eb7bf5988..021f963ed786 100644
--- a/lib/Drupal/views/Plugins/views/display/Feed.php
+++ b/lib/Drupal/views/Plugins/views/display/Feed.php
@@ -8,6 +8,8 @@
 namespace Drupal\views\Plugins\views\display;
 
 use Symfony\Component\HttpFoundation\Response;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * The plugin that handles a feed, such as RSS or atom.
@@ -16,6 +18,20 @@
  *
  * @ingroup views_display_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "feed",
+ *   title = @Translation("Feed"),
+ *   help = @Translation("Display the view as a feed, such as an RSS feed."),
+ *   uses_hook_menu = TRUE,
+ *   use_ajax = FALSE,
+ *   use_pager = FALSE,
+ *   accept_attachments = FALSE,
+ *   admin = @Translation("Feed"),
+ *   help_topic = "display-feed"
+ * )
+ */
 class Feed extends Page {
   function init(&$view, &$display, $options = NULL) {
     parent::init($view, $display, $options);
diff --git a/lib/Drupal/views/Plugins/views/display/Page.php b/lib/Drupal/views/Plugins/views/display/Page.php
index e13c0356a0d3..d94e94ad7a83 100644
--- a/lib/Drupal/views/Plugins/views/display/Page.php
+++ b/lib/Drupal/views/Plugins/views/display/Page.php
@@ -7,11 +7,31 @@
 
 namespace Drupal\views\Plugins\views\display;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles a full page.
  *
  * @ingroup views_display_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "page",
+ *   title = @Translation("Page"),
+ *   help = @Translation("Display the view as a page, with a URL and menu links."),
+ *   uses_hook_menu = TRUE,
+ *   contextual_links_locations = {"page"},
+ *   theme = "views_view",
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   admin = @Translation("Page"),
+ *   help_topic = "display-page"
+ * )
+ */
 class Page extends DisplayPluginBase {
   /**
    * The page display has a path.
diff --git a/lib/Drupal/views/Plugins/views/display_extender/DefaultDisplayExtender.php b/lib/Drupal/views/Plugins/views/display_extender/DefaultDisplayExtender.php
new file mode 100644
index 000000000000..5dd3be2c2751
--- /dev/null
+++ b/lib/Drupal/views/Plugins/views/display_extender/DefaultDisplayExtender.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Drupal\views\Plugins\views\display_extender;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @Plugin(
+ *   plugin_id = "default",
+ *   title = @Translation("Empty display extender"),
+ *   help = @Translation("Default settings for this view."),
+ *   enabled = FALSE,
+ *   no_ui = TRUE
+ * )
+ */
+class DefaultDisplayExtender extends DisplayExtenderPluginBase {
+}
diff --git a/lib/Drupal/views/Plugins/views/display_extender/DisplayExtenderPluginBase.php b/lib/Drupal/views/Plugins/views/display_extender/DisplayExtenderPluginBase.php
index ad1d4e07bb46..8170f3ac50ff 100644
--- a/lib/Drupal/views/Plugins/views/display_extender/DisplayExtenderPluginBase.php
+++ b/lib/Drupal/views/Plugins/views/display_extender/DisplayExtenderPluginBase.php
@@ -8,13 +8,17 @@
 namespace Drupal\views\Plugins\views\display_extender;
 
 use Drupal\views\Plugins\views\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * @todo.
  *
  * @ingroup views_display_plugins
  */
-class DisplayExtenderPluginBase extends Plugin {
+
+/**
+ */
+abstract class DisplayExtenderPluginBase extends Plugin {
   function init(&$view, &$display) {
     $this->view = $view;
     $this->display = $display;
diff --git a/lib/Drupal/views/Plugins/views/exposed_form/Basic.php b/lib/Drupal/views/Plugins/views/exposed_form/Basic.php
index 267287d63499..526a0a3f82ca 100644
--- a/lib/Drupal/views/Plugins/views/exposed_form/Basic.php
+++ b/lib/Drupal/views/Plugins/views/exposed_form/Basic.php
@@ -7,9 +7,22 @@
 
 namespace Drupal\views\Plugins\views\exposed_form;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Exposed form plugin that provides a basic exposed form.
  *
  * @ingroup views_exposed_form_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "basic",
+ *   title = @Translation("Basic"),
+ *   help = @Translation("Basic exposed form"),
+ *   uses_options = TRUE,
+ *   help_topic = "exposed-form-basic"
+ * )
+ */
 class Basic extends ExposedFormPluginBase { }
diff --git a/lib/Drupal/views/Plugins/views/exposed_form/InputRequired.php b/lib/Drupal/views/Plugins/views/exposed_form/InputRequired.php
index 83fbf10a2c03..3ba1932d7037 100644
--- a/lib/Drupal/views/Plugins/views/exposed_form/InputRequired.php
+++ b/lib/Drupal/views/Plugins/views/exposed_form/InputRequired.php
@@ -7,11 +7,24 @@
 
 namespace Drupal\views\Plugins\views\exposed_form;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Exposed form plugin that provides an exposed form with required input.
  *
  * @ingroup views_exposed_form_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "input_required",
+ *   title = @Translation("Input required"),
+ *   help = @Translation("An exposed form that only renders a view if the form contains user input."),
+ *   uses_options = TRUE,
+ *   help_topic = "exposed-form-input-required"
+ * )
+ */
 class InputRequired extends ExposedFormPluginBase {
 
   function option_definition() {
diff --git a/lib/Drupal/views/Plugins/views/filter/BooleanOperatorString.php b/lib/Drupal/views/Plugins/views/filter/BooleanOperatorString.php
index 1d6a7ed9eba5..6d752c317ed2 100644
--- a/lib/Drupal/views/Plugins/views/filter/BooleanOperatorString.php
+++ b/lib/Drupal/views/Plugins/views/filter/BooleanOperatorString.php
@@ -22,8 +22,8 @@
  */
 
 /**
- * @plugin(
- *   plugid_id = "boolean_string"
+ * @Plugin(
+ *   plugin_id = "boolean_string"
  * )
  */
 class BooleanOperatorString extends BooleanOperator {
diff --git a/lib/Drupal/views/Plugins/views/localization/Core.php b/lib/Drupal/views/Plugins/views/localization/Core.php
index b567d908ba79..514940e33e52 100644
--- a/lib/Drupal/views/Plugins/views/localization/Core.php
+++ b/lib/Drupal/views/Plugins/views/localization/Core.php
@@ -7,11 +7,23 @@
 
 namespace Drupal\views\Plugins\views\localization;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Localization plugin to pass translatable strings through t().
  *
  * @ingroup views_localization_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "core",
+ *   title = @Translation("Core"),
+ *   help = @Translation("Use Drupal core t() function. Not recommended, as it doesn't support updates to existing strings."),
+ *   help_topic = "localization-core"
+ * )
+ */
 class Core extends LocalizationPluginBase {
 
   /**
diff --git a/lib/Drupal/views/Plugins/views/localization/None.php b/lib/Drupal/views/Plugins/views/localization/None.php
index 0a344f2bc98c..d6cd5569fa28 100644
--- a/lib/Drupal/views/Plugins/views/localization/None.php
+++ b/lib/Drupal/views/Plugins/views/localization/None.php
@@ -7,11 +7,23 @@
 
 namespace Drupal\views\Plugins\views\localization;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Localization plugin for no localization.
  *
  * @ingroup views_localization_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("Do not pass admin strings for translation."),
+ *   help_topic = "localization-none"
+ * )
+ */
 class None extends LocalizationPluginBase {
   var $translate = FALSE;
 
diff --git a/lib/Drupal/views/Plugins/views/pager/Full.php b/lib/Drupal/views/Plugins/views/pager/Full.php
index be2250ed6f95..7946bdd6a78b 100644
--- a/lib/Drupal/views/Plugins/views/pager/Full.php
+++ b/lib/Drupal/views/Plugins/views/pager/Full.php
@@ -7,11 +7,25 @@
 
 namespace Drupal\views\Plugins\views\pager;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin to handle full pager.
  *
  * @ingroup views_pager_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "full",
+ *   title = @Translation("Paged output, full pager"),
+ *   short_title = @Translation("Full"),
+ *   help = @Translation("Paged output, full Drupal style"),
+ *   help_topic = "pager-full",
+ *   uses_options = TRUE
+ * )
+ */
 class Full extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
diff --git a/lib/Drupal/views/Plugins/views/pager/Mini.php b/lib/Drupal/views/Plugins/views/pager/Mini.php
index d3d37d1bc492..f83552c535d2 100644
--- a/lib/Drupal/views/Plugins/views/pager/Mini.php
+++ b/lib/Drupal/views/Plugins/views/pager/Mini.php
@@ -7,11 +7,25 @@
 
 namespace Drupal\views\Plugins\views\pager;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin to handle full pager.
  *
  * @ingroup views_pager_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "mini",
+ *   title = @Translation("Paged output, mini pager"),
+ *   short_title = @Translation("Mini"),
+ *   help = @Translation("Use the mini pager output."),
+ *   help_topic = "pager-mini",
+ *   uses_options = TRUE
+ * )
+ */
 class Mini extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
diff --git a/lib/Drupal/views/Plugins/views/pager/None.php b/lib/Drupal/views/Plugins/views/pager/None.php
index 8d10356c5db0..20733b376509 100644
--- a/lib/Drupal/views/Plugins/views/pager/None.php
+++ b/lib/Drupal/views/Plugins/views/pager/None.php
@@ -7,11 +7,25 @@
 
 namespace Drupal\views\Plugins\views\pager;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin for views without pagers.
  *
  * @ingroup views_pager_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "none",
+ *   title = @Translation("Display all items"),
+ *   help = @Translation("Display all items that this view might find."),
+ *   help_topic = "pager-none",
+ *   uses_options = TRUE,
+ *   type = "basic"
+ * )
+ */
 class None extends PagerPluginBase {
 
   function init(&$view, &$display, $options = array()) {
diff --git a/lib/Drupal/views/Plugins/views/pager/Some.php b/lib/Drupal/views/Plugins/views/pager/Some.php
index fcbd14645f7f..4bf1d1de3594 100644
--- a/lib/Drupal/views/Plugins/views/pager/Some.php
+++ b/lib/Drupal/views/Plugins/views/pager/Some.php
@@ -7,11 +7,25 @@
 
 namespace Drupal\views\Plugins\views\pager;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin for views without pagers.
  *
  * @ingroup views_pager_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "some",
+ *   title = @Translation("Display a specified number of items"),
+ *   help = @Translation("Display a limited number items that this view might find."),
+ *   help_topic = "pager-some",
+ *   uses_options = TRUE,
+ *   type = "basic"
+ * )
+ */
 class Some extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
diff --git a/lib/Drupal/views/Plugins/views/query/Sql.php b/lib/Drupal/views/Plugins/views/query/Sql.php
index 3f3d501af635..0bd77579b44d 100644
--- a/lib/Drupal/views/Plugins/views/query/Sql.php
+++ b/lib/Drupal/views/Plugins/views/query/Sql.php
@@ -10,7 +10,16 @@
 use Drupal\Core\Database\Database;
 use Drupal\views\Join;
 use Exception;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
+/**
+ * @Plugin(
+ *   plugin_id = "views_query",
+ *   title = @Translation("SQL Query"),
+ *   help = @Translation("Query will be generated and run using the Drupal database API.")
+ * )
+ */
 class Sql extends QueryPluginBase {
   /**
    * A list of tables in the order they should be added, keyed by alias.
diff --git a/lib/Drupal/views/Plugins/views/row/Fields.php b/lib/Drupal/views/Plugins/views/row/Fields.php
index f454d92364e7..5482652152e3 100644
--- a/lib/Drupal/views/Plugins/views/row/Fields.php
+++ b/lib/Drupal/views/Plugins/views/row/Fields.php
@@ -7,6 +7,9 @@
 
 namespace Drupal\views\Plugins\views\row;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The basic 'fields' row plugin
  *
@@ -15,6 +18,19 @@
  *
  * @ingroup views_row_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "fields",
+ *   title = @Translation("Fields"),
+ *   help = @Translation("Displays the fields with an optional template."),
+ *   theme = "views_view_fields",
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-row-fields"
+ * )
+ */
 class Fields extends RowPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/row/RssFields.php b/lib/Drupal/views/Plugins/views/row/RssFields.php
index 8bfc73b72aa5..190206a69844 100644
--- a/lib/Drupal/views/Plugins/views/row/RssFields.php
+++ b/lib/Drupal/views/Plugins/views/row/RssFields.php
@@ -7,9 +7,25 @@
 
 namespace Drupal\views\Plugins\views\row;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Renders an RSS item based on fields.
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "rss_fields",
+ *   title = @Translation("Fields"),
+ *   help = @Translation("Display fields as RSS items."),
+ *   theme = "views_view_row_rss",
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-row-fields"
+ * )
+ */
 class RssFields extends RowPluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/sort/Date.php b/lib/Drupal/views/Plugins/views/sort/Date.php
index 29bc4e5b8754..6fd184cd09b9 100644
--- a/lib/Drupal/views/Plugins/views/sort/Date.php
+++ b/lib/Drupal/views/Plugins/views/sort/Date.php
@@ -15,7 +15,7 @@
  * This handler enables granularity, which is the ability to make dates
  * equivalent based upon nearness.
  *
- *  @Plugin(
+ * @Plugin(
  *   plugin_id = "date"
  * )
  *
diff --git a/lib/Drupal/views/Plugins/views/sort/GroupByNumeric.php b/lib/Drupal/views/Plugins/views/sort/GroupByNumeric.php
index 23ade3d97726..b217f7ec50df 100644
--- a/lib/Drupal/views/Plugins/views/sort/GroupByNumeric.php
+++ b/lib/Drupal/views/Plugins/views/sort/GroupByNumeric.php
@@ -12,7 +12,7 @@
 /**
  * Handler for GROUP BY on simple numeric fields.
  *
- *  @Plugin(
+ * @Plugin(
  *   plugin_id = "groupby_numeric"
  * )
  */
diff --git a/lib/Drupal/views/Plugins/views/sort/MenuHierarchy.php b/lib/Drupal/views/Plugins/views/sort/MenuHierarchy.php
index f524e22487ce..8b1b9b686ac1 100644
--- a/lib/Drupal/views/Plugins/views/sort/MenuHierarchy.php
+++ b/lib/Drupal/views/Plugins/views/sort/MenuHierarchy.php
@@ -20,7 +20,7 @@
  *
  * This is only really useful for the {menu_links} table.
  *
- *  @Plugin(
+ * @Plugin(
  *   plugin_id = "menu_hierarchy"
  * )
  */
diff --git a/lib/Drupal/views/Plugins/views/sort/Random.php b/lib/Drupal/views/Plugins/views/sort/Random.php
index ef1635b10135..f3e729085363 100644
--- a/lib/Drupal/views/Plugins/views/sort/Random.php
+++ b/lib/Drupal/views/Plugins/views/sort/Random.php
@@ -12,7 +12,7 @@
 /**
  * Handle a random sort.
  *
- *  @Plugin(
+ * @Plugin(
  *   plugin_id = "random"
  * )
  */
diff --git a/lib/Drupal/views/Plugins/views/style/DefaultStyle.php b/lib/Drupal/views/Plugins/views/style/DefaultStyle.php
index eae07b90b477..0137660a0e02 100644
--- a/lib/Drupal/views/Plugins/views/style/DefaultStyle.php
+++ b/lib/Drupal/views/Plugins/views/style/DefaultStyle.php
@@ -7,12 +7,30 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Unformatted style plugin to render rows one after another with no
  * decorations.
  *
  * @ingroup views_style_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "default",
+ *   title = @Translation("Unformatted list"),
+ *   help = @Translation("Displays rows one after another."),
+ *   theme = "views_view_unformatted",
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_grouping = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-unformatted"
+ * )
+ */
 class DefaultStyle extends StylePluginBase {
   /**
    * Set default options
diff --git a/lib/Drupal/views/Plugins/views/style/StyleSummaryPluginBase.php b/lib/Drupal/views/Plugins/views/style/DefaultSummary.php
similarity index 83%
rename from lib/Drupal/views/Plugins/views/style/StyleSummaryPluginBase.php
rename to lib/Drupal/views/Plugins/views/style/DefaultSummary.php
index c12c2695fb0b..33bdc6cefa21 100644
--- a/lib/Drupal/views/Plugins/views/style/StyleSummaryPluginBase.php
+++ b/lib/Drupal/views/Plugins/views/style/DefaultSummary.php
@@ -7,14 +7,28 @@
 
 namespace Drupal\views\Plugins\views\style;
 
-use Drupal\views\Plugins\views\Plugin;
+use Drupal\views\Plugins\views\style\StylePluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class StyleSummaryPluginBase extends Plugin {
+
+/**
+ * @Plugin(
+ *   plugin_id = "default_summary",
+ *   title = @Translation("List"),
+ *   help = @Translation("Displays the default summary as a list."),
+ *   theme = "views_view_summary",
+ *   type = "summary",
+ *   uses_options = TRUE,
+ *   help_topic = "style-summary"
+ * )
+ */
+class DefaultSummary extends StylePluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/lib/Drupal/views/Plugins/views/style/Grid.php b/lib/Drupal/views/Plugins/views/style/Grid.php
index e7894419b191..38d4c93e7002 100644
--- a/lib/Drupal/views/Plugins/views/style/Grid.php
+++ b/lib/Drupal/views/Plugins/views/style/Grid.php
@@ -7,11 +7,29 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item in a grid cell.
  *
  * @ingroup views_style_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "grid",
+ *   title = @Translation("Grid"),
+ *   help = @Translation("Displays rows in a grid."),
+ *   theme = "views_view_grid",
+ *   uses_fields = FALSE,
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-grid"
+ * )
+ */
 class Grid extends StylePluginBase {
   /**
    * Set default options
diff --git a/lib/Drupal/views/Plugins/views/style/List.php b/lib/Drupal/views/Plugins/views/style/HtmlList.php
similarity index 76%
rename from lib/Drupal/views/Plugins/views/style/List.php
rename to lib/Drupal/views/Plugins/views/style/HtmlList.php
index 2d3119e6bbed..c5df06d02f7c 100644
--- a/lib/Drupal/views/Plugins/views/style/List.php
+++ b/lib/Drupal/views/Plugins/views/style/HtmlList.php
@@ -7,12 +7,29 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item in an ordered or unordered list.
  *
  * @ingroup views_style_plugins
  */
-class List extends StylePluginBase {
+
+/**
+ * @Plugin(
+ *   plugin_id = "html_list",
+ *   title = @Translation("HTML List"),
+ *   help = @Translation("Displays rows as HTML list."),
+ *   theme = "views_view_list",
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-list"
+ * )
+ */
+class HtmlList extends StylePluginBase {
   /**
    * Set default options
    */
diff --git a/lib/Drupal/views/Plugins/views/style/JumpMenu.php b/lib/Drupal/views/Plugins/views/style/JumpMenu.php
index b1a1b03d056f..6f4b794fb95a 100644
--- a/lib/Drupal/views/Plugins/views/style/JumpMenu.php
+++ b/lib/Drupal/views/Plugins/views/style/JumpMenu.php
@@ -7,11 +7,28 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item as a row in a table.
  *
  * @ingroup views_style_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "jump_menu",
+ *   title = @Translation("Jump menu"),
+ *   help = @Translation("Puts all of the results into a select box and allows the user to go to a different page based upon the results."),
+ *   theme = "views_view_jump_menu",
+ *   uses_row_plugin = TRUE,
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-jump-menu"
+ * )
+ */
 class JumpMenu extends StylePluginBase {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/lib/Drupal/views/Plugins/views/style/JumpMenuSummary.php b/lib/Drupal/views/Plugins/views/style/JumpMenuSummary.php
index 71576e0e1b12..fe129c1dbbec 100644
--- a/lib/Drupal/views/Plugins/views/style/JumpMenuSummary.php
+++ b/lib/Drupal/views/Plugins/views/style/JumpMenuSummary.php
@@ -7,12 +7,27 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class JumpMenuSummary extends StyleSummaryPluginBase {
+/**
+ * @Plugin(
+ *   plugin_id = "jump_menu_summary",
+ *   title = @Translation("Jump menu"),
+ *   help = @Translation("Puts all of the results into a select box and allows the user to go to a different page based upon the results."),
+ *   theme = "views_view_summary_jump_menu",
+ *   uses_options = TRUE,
+ *   type = "summary",
+ *   help_topic = "style-summary-jump-menu"
+ * )
+ */
+
+class JumpMenuSummary extends DefaultSummary {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/lib/Drupal/views/Plugins/views/style/Rss.php b/lib/Drupal/views/Plugins/views/style/Rss.php
index 49d2aaa78531..331ce7c45f0a 100644
--- a/lib/Drupal/views/Plugins/views/style/Rss.php
+++ b/lib/Drupal/views/Plugins/views/style/Rss.php
@@ -7,11 +7,27 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default style plugin to render an RSS feed.
  *
  * @ingroup views_style_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "rss",
+ *   title = @Translation("RSS Feed"),
+ *   help = @Translation("Generates an RSS feed from a view."),
+ *   theme = "views_view_rss",
+ *   uses_row_plugin = TRUE,
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-rss"
+ * )
+ */
 class Rss extends StylePluginBase {
   function attach_to($display_id, $path, $title) {
     $display = $this->view->display[$display_id]->handler;
diff --git a/lib/Drupal/views/Plugins/views/style/StylePluginBase.php b/lib/Drupal/views/Plugins/views/style/StylePluginBase.php
index 1f1c8713c75d..5779e3c989e3 100644
--- a/lib/Drupal/views/Plugins/views/style/StylePluginBase.php
+++ b/lib/Drupal/views/Plugins/views/style/StylePluginBase.php
@@ -7,7 +7,9 @@
 
 namespace Drupal\views\Plugins\views\style;
 
-use Drupal\views\Plugins\views\Plugin;
+use Drupal\views\Plugins\views\Plugin as ViewsPlugin;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * @defgroup views_style_plugins Views style plugins
@@ -26,7 +28,7 @@
 /**
  * Base class to define a style plugin handler.
  */
-class StylePluginBase extends Plugin {
+class StylePluginBase extends ViewsPlugin {
   /**
    * Store all available tokens row rows.
    */
@@ -81,14 +83,14 @@ function destroy() {
    * Return TRUE if this style also uses a row plugin.
    */
   function uses_row_plugin() {
-    return !empty($this->definition['uses row plugin']);
+    return !empty($this->definition['uses_row_plugin']);
   }
 
   /**
    * Return TRUE if this style also uses a row plugin.
    */
   function uses_row_class() {
-    return !empty($this->definition['uses row class']);
+    return !empty($this->definition['uses_row_class']);
   }
 
   /**
diff --git a/lib/Drupal/views/Plugins/views/style/Table.php b/lib/Drupal/views/Plugins/views/style/Table.php
index a5111c7e2de0..2ed7192dedd3 100644
--- a/lib/Drupal/views/Plugins/views/style/Table.php
+++ b/lib/Drupal/views/Plugins/views/style/Table.php
@@ -7,11 +7,29 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item as a row in a table.
  *
  * @ingroup views_style_plugins
  */
+
+/**
+ * @Plugin(
+ *   plugin_id = "table",
+ *   title = @Translation("Table"),
+ *   help = @Translation("Displays rows in a table."),
+ *   theme = "views_view_table",
+ *   uses_row_plugin = FALSE,
+ *   uses_row_class = TRUE,
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-table"
+ * )
+ */
 class Table extends StylePluginBase {
 
   /**
diff --git a/lib/Drupal/views/Plugins/views/style/UnformattedSummary.php b/lib/Drupal/views/Plugins/views/style/UnformattedSummary.php
index 364b5615ceec..9eb50e96bbe7 100644
--- a/lib/Drupal/views/Plugins/views/style/UnformattedSummary.php
+++ b/lib/Drupal/views/Plugins/views/style/UnformattedSummary.php
@@ -7,12 +7,27 @@
 
 namespace Drupal\views\Plugins\views\style;
 
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class UnformattedSummary extends StyleSummaryPluginBase {
+
+/**
+ * @Plugin(
+ *   plugin_id = "unformatted_summary",
+ *   title = @Translation("Unformatted"),
+ *   help = @Translation("Displays the summary unformatted, with option for one after another or inline."),
+ *   theme = "views_view_summary_unformatted",
+ *   type = "summary",
+ *   uses_options = TRUE,
+ *   help_topic = "style-summary-unformatted"
+ * )
+ */
+class UnformattedSummary extends DefaultSummary {
   function option_definition() {
     $options = parent::option_definition();
     $options['inline'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/lib/Drupal/views/Plugins/views/wizard/Comment.php b/lib/Drupal/views/Plugins/views/wizard/Comment.php
index c946b01af6f2..8b5abb0433f7 100644
--- a/lib/Drupal/views/Plugins/views/wizard/Comment.php
+++ b/lib/Drupal/views/Plugins/views/wizard/Comment.php
@@ -8,9 +8,46 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\wizard;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
+ */
 
 /**
  * Tests creating comment views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "comment",
+ *   base_table = "comment",
+ *   created_column = "created",
+ *   title = @Translation("Comments"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "comment",
+ *       "field" = "status"
+ *     },
+ *     "status_node" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status",
+ *       "relationship" = "nid",
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "cid",
+ *     "table" = "comment",
+ *     "field" = "cid",
+ *     "exclude" = TRUE,
+ *     "link_to_comment" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "comment/[cid]#comment-[cid]"
+ *     }
+ *   }
+ * )
  */
 class Comment extends WizardBase {
 
diff --git a/lib/Drupal/views/Plugins/views/wizard/File.php b/lib/Drupal/views/Plugins/views/wizard/File.php
index e30301cfe4c1..c6d420192784 100644
--- a/lib/Drupal/views/Plugins/views/wizard/File.php
+++ b/lib/Drupal/views/Plugins/views/wizard/File.php
@@ -8,9 +8,25 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\views\wizard\WizardBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * Tests creating managed files views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "file_managed",
+ *   base_table = "file_managed",
+ *   created_column = "timestamp",
+ *   title = @Translation("Files"),
+ *   path_field = {
+ *     "id" = "uri",
+ *     "table" = "file_managed",
+ *     "field" = "uri",
+ *     "exclude" = TRUE,
+ *     "file_download_path" = TRUE
+ *   }
+ * )
  */
 class File extends WizardBase {
   protected function default_display_options($form, $form_state) {
diff --git a/lib/Drupal/views/Plugins/views/wizard/Node.php b/lib/Drupal/views/Plugins/views/wizard/Node.php
index 0592d3f057f0..532adf4a69e5 100644
--- a/lib/Drupal/views/Plugins/views/wizard/Node.php
+++ b/lib/Drupal/views/Plugins/views/wizard/Node.php
@@ -8,10 +8,46 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\views\wizard\WizardBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
+ */
 
 /**
  * Tests creating node views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "node",
+ *   base_table = "node",
+ *   created_column = "created",
+ *   title = @Translation("Content"),
+ *   available_sorts = {
+ *     "title:DESC" = @Translation("Title")
+ *   },
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "nid",
+ *     "table" = "node",
+ *     "field" = "nid",
+ *     "exclude" = TRUE,
+ *     "link_to_node" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "node/[nid]"
+ *     }
+ *   }
+ * )
+ *
  */
+
 class Node extends WizardBase {
 
   protected function row_style_options($type) {
diff --git a/lib/Drupal/views/Plugins/views/wizard/NodeRevision.php b/lib/Drupal/views/Plugins/views/wizard/NodeRevision.php
index 0e2fa1160515..2fcec62dff24 100644
--- a/lib/Drupal/views/Plugins/views/wizard/NodeRevision.php
+++ b/lib/Drupal/views/Plugins/views/wizard/NodeRevision.php
@@ -8,9 +8,46 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\views\wizard\WizardBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
+ */
 
 /**
  * Tests creating node revision views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "node_revision",
+ *   base_table = "node_revision",
+ *   created_column = "timestamp",
+ *   title = @Translation("Content revisions"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "vid",
+ *     "table" = "node_revision",
+ *     "field" = "vid",
+ *     "exclude" = TRUE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "node/[nid]/revisions/[vid]/view"
+ *     }
+ *   },
+ *   path_fields_supplemental = {
+ *     "id" = "id",
+ *     "table" = "node",
+ *     "field" = "nid",
+ *     "exclude" = TRUE,
+ *     "link_to_node" = FALSE
+ *   }
+ * )
  */
 class NodeRevision extends WizardBase {
 
diff --git a/lib/Drupal/views/Plugins/views/wizard/TaxonomyTerm.php b/lib/Drupal/views/Plugins/views/wizard/TaxonomyTerm.php
index 3137dd189366..629df9ed625f 100644
--- a/lib/Drupal/views/Plugins/views/wizard/TaxonomyTerm.php
+++ b/lib/Drupal/views/Plugins/views/wizard/TaxonomyTerm.php
@@ -8,9 +8,29 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\views\wizard\WizardBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * Tests creating taxonomy views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "taxonomy_term",
+ *   base_table = "taxonomy_term_data",
+ *   created_column = "created",
+ *   title = @Translation("Taxonomy terms"),
+ *   filters = {""},
+ *   path_field = {
+ *     "id" = "tid",
+ *     "table" = "taxonomy_term_data",
+ *     "field" = "tid",
+ *     "exclude" = TRUE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "taxonomy/term/[tid]"
+ *     }
+ *   }
+ * )
  */
 class TaxonomyTerm extends WizardBase {
 
diff --git a/lib/Drupal/views/Plugins/views/wizard/Users.php b/lib/Drupal/views/Plugins/views/wizard/Users.php
index ea7524cdce17..e55b48602836 100644
--- a/lib/Drupal/views/Plugins/views/wizard/Users.php
+++ b/lib/Drupal/views/Plugins/views/wizard/Users.php
@@ -8,9 +8,40 @@
 namespace Drupal\views\Plugins\views\wizard;
 
 use Drupal\views\Plugins\views\wizard\WizardBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
+ */
 
 /**
  * Tests creating user views with the wizard.
+ *
+ * @Plugin(
+ *   plugin_id = "users",
+ *   base_table = "users",
+ *   created_column = "created",
+ *   title = @Translation("Users"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "users",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "uid",
+ *     "table" = "users",
+ *     "field" = "uid",
+ *     "exclude" = TRUE,
+ *     "link_to_user" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "user/[uid]"
+ *     }
+ *   }
+ * )
  */
 class Users extends WizardBase {
   protected function default_display_options($form, $form_state) {
diff --git a/lib/Drupal/views/Tests/TranslatableTest.php b/lib/Drupal/views/Tests/TranslatableTest.php
index 93efcb5fb911..9039b871e304 100644
--- a/lib/Drupal/views/Tests/TranslatableTest.php
+++ b/lib/Drupal/views/Tests/TranslatableTest.php
@@ -30,7 +30,7 @@ public function viewsPlugins() {
     return array(
       'localization' => array(
         'test' => array(
-          'no ui' => TRUE,
+          'no_ui' => TRUE,
           'title' => t('Test'),
           'help' => t('This is a test description.'),
           'handler' => 'views_plugin_localization_test',
diff --git a/modules/comment.views.inc b/modules/comment.views.inc
index 930720da2df9..50960171f4b9 100644
--- a/modules/comment.views.inc
+++ b/modules/comment.views.inc
@@ -660,42 +660,3 @@ function template_preprocess_views_view_row_comment(&$vars) {
   }
   $vars['comment'] = drupal_render($build);
 }
-
-/**
- * Implements hook_views_wizard().
- */
-function comment_views_wizard() {
-  $plugins['comment'] = array(
-    'name' => 'comment',
-    'base_table' => 'comment',
-    'created_column' => 'created',
-    'class' => 'Drupal\views\Plugins\views\wizard\Comment',
-    'title' => t('Comments'),
-    'filters' => array(
-      'status' => array(
-        'value' => COMMENT_PUBLISHED,
-        'table' => 'comment',
-        'field' => 'status',
-      ),
-      'status_node' => array(
-        'value' => NODE_PUBLISHED,
-        'table' => 'node',
-        'field' => 'status',
-        'relationship' => 'nid',
-      ),
-    ),
-    'path_field' => array(
-      'id' => 'cid',
-      'table' => 'comment',
-      'field' => 'cid',
-      'exclude' => TRUE,
-      'link_to_comment' => FALSE,
-      'alter' => array(
-        'alter_text' => 1,
-        'text' => 'comment/[cid]#comment-[cid]',
-      ),
-    ),
-  );
-
-  return $plugins;
-}
diff --git a/modules/comment.views_default.inc b/modules/comment.views_default.inc
index 414f721bad19..1609caeb9d3b 100644
--- a/modules/comment.views_default.inc
+++ b/modules/comment.views_default.inc
@@ -32,7 +32,7 @@ function comment_views_default_views() {
   $handler->display->display_options['exposed_form']['type'] = 'basic';
   $handler->display->display_options['pager']['type'] = 'some';
   $handler->display->display_options['pager']['options']['items_per_page'] = 5;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['row_plugin'] = 'fields';
   /* Relationship: Comment: Content */
   $handler->display->display_options['relationships']['nid']['id'] = 'nid';
@@ -65,7 +65,7 @@ function comment_views_default_views() {
   /* Display: Page */
   $handler = $view->new_display('page', 'Page', 'page');
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/modules/node.views.inc b/modules/node.views.inc
index 76ec68771934..5e5c3fa18c29 100644
--- a/modules/node.views.inc
+++ b/modules/node.views.inc
@@ -756,72 +756,9 @@ function node_views_analyze($view) {
  * Implements hook_views_wizard().
  */
 function node_views_wizard() {
-  $plugins['node'] = array(
-    'name' => 'node',
-    'base_table' => 'node',
-    'created_column' => 'created',
-    'available_sorts' => array(
-      'title:DESC' => t('Title')
-    ),
-    'class' => 'Drupal\views\Plugins\views\wizard\Node',
-    'title' => t('Content'),
-    'filters' => array(
-      'status' => array(
-        'value' => NODE_PUBLISHED,
-        'table' => 'node',
-        'field' => 'status',
-      ),
-    ),
-    'path_field' => array(
-      'id' => 'nid',
-      'table' => 'node',
-      'field' => 'nid',
-      'exclude' => TRUE,
-      'link_to_node' => FALSE,
-      'alter' => array(
-        'alter_text' => 1,
-        'text' => 'node/[nid]',
-      ),
-    ),
-  );
-
+  // @todo: figure this piece out.
   if (module_exists('statistics')) {
     $plugins['node']['available_sorts']['node_counter-totalcount:DESC'] = t('Number of hits');
   }
 
-  $plugins['node_revision'] = array(
-    'name' => 'node_revision',
-    'base_table' => 'node_revision',
-    'created_column' => 'timestamp',
-    'class' => 'Drupal\views\Plugins\views\wizard\NodeRevision',
-    'title' => t('Content revisions'),
-    'filters' => array(
-      'status' => array(
-        'value' => '1',
-        'table' => 'node', // @todo - unclear if this should be node or node_revision
-        'field' => 'status',
-      ),
-    ),
-    'path_field' => array(
-      'id' => 'vid',
-      'table' => 'node_revision',
-      'field' => 'vid',
-      'exclude' => TRUE,
-      'alter' => array(
-        'alter_text' => 1,
-        'text' => 'node/[nid]/revisions/[vid]/view',
-      ),
-    ),
-    'path_fields_supplemental' => array(
-      array(
-        'id' => 'nid',
-        'table' => 'node',
-        'field' => 'nid',
-        'exclude' => TRUE,
-        'link_to_node' => FALSE,
-      ),
-    ),
-  );
-
-  return $plugins;
 }
diff --git a/modules/search.views_default.inc b/modules/search.views_default.inc
index 1645f30ea33a..7567703227f7 100644
--- a/modules/search.views_default.inc
+++ b/modules/search.views_default.inc
@@ -30,7 +30,7 @@ function search_views_default_views() {
   $handler->display->display_options['exposed_form']['type'] = 'basic';
   $handler->display->display_options['pager']['type'] = 'full';
   $handler->display->display_options['pager']['options']['items_per_page'] = 30;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['style_options']['type'] = 'ol';
   $handler->display->display_options['row_plugin'] = 'fields';
   /* No results behavior: Global: Text area */
@@ -77,7 +77,7 @@ function search_views_default_views() {
   $handler->display->display_options['defaults']['use_more'] = FALSE;
   $handler->display->display_options['use_more'] = TRUE;
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/modules/statistics.views_default.inc b/modules/statistics.views_default.inc
index 1afb499a2172..55e82afbb946 100644
--- a/modules/statistics.views_default.inc
+++ b/modules/statistics.views_default.inc
@@ -159,7 +159,7 @@ function statistics_views_default_views() {
   /* Display: Popular (block) */
   $handler = $view->new_display('block', 'Popular (block)', 'block');
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
@@ -190,7 +190,7 @@ function statistics_views_default_views() {
   $handler->display->display_options['defaults']['link_display'] = FALSE;
   $handler->display->display_options['link_display'] = 'page_1';
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/views.api.php b/views.api.php
index 1e4e38ce77f4..d774f5d652c3 100644
--- a/views.api.php
+++ b/views.api.php
@@ -260,10 +260,10 @@
  *      'title' => t('Feed'),
  *      'help' => t('Display the view as a feed, such as an RSS feed.'),
  *      'handler' => 'views_plugin_display_feed',
- *      'uses hook menu' => TRUE,
+ *      'uses_hook_menu' => TRUE,
  *      'use ajax' => FALSE,
  *      'use pager' => FALSE,
- *      'accept attachments' => FALSE,
+ *      'accept_attachments' => FALSE,
  *      'admin' => t('Feed'),
  *      'help topic' => 'display-feed',
  *     ),
@@ -535,7 +535,7 @@ function hook_views_data_alter(&$data) {
  *     - parent: The name of the plugin this plugin extends. Since Drupal 7 this
  *       is no longer required, but may still be useful from a code readability
  *       perspective.
- *     - no ui: Set to TRUE to denote that the plugin doesn't appear to be
+ *     - no_ui: Set to TRUE to denote that the plugin doesn't appear to be
  *       selectable in the ui, though on the api side they still exists.
  *     - uses options: Set to TRUE to denote that the plugin has an additional
  *       options form.
@@ -560,18 +560,15 @@ function hook_views_data_alter(&$data) {
  *       disabled there will be no ajax option in the ui.
  *     - use pager: Set to TRUE to allow paging in the display.
  *     - use more: Set to TRUE to allow the 'use more' setting in the display.
- *     - accept attachments: Set to TRUE to allow attachment displays to be
+ *     - accept_attachments: Set to TRUE to allow attachment displays to be
  *       attached to this display type.
- *     - contextual links locations: An array with places where contextual links
+ *     - contextual_links_locations: An array with places where contextual links
  *       should be added. Can for example be 'page' or 'block'. If you don't
- *       specify it there will be contextual links around the rendered view. If
- *       this is not set or regions have been specified, views will display an
- *       option to 'hide contextual links'. Use an empty array if you do not want
- *       this.
- *     - uses hook menu: Set to TRUE to have the display included by
+ *       specify it there will be contextual links around the rendered view.
+ *     - uses_hook_menu: Set to TRUE to have the display included by
  *       views_menu_alter(). views_menu_alter executes then execute_hook_menu
  *       on the display object.
- *     - uses hook block: Set to TRUE to have the display included by
+ *     - uses_hook_block: Set to TRUE to have the display included by
  *       views_block_info().
  *     - theme: The name of a theme suggestion to use for the display.
  *     - js: An array with paths to js files that should be included for the
@@ -579,8 +576,8 @@ function hook_views_data_alter(&$data) {
  *       root.
  *
  *   - Used by style plugins:
- *     - uses row plugin: Set to TRUE to allow row plugins for this style.
- *     - uses row class: Set to TRUE to allow the CSS class settings for rows.
+ *     - uses_row_plugin: Set to TRUE to allow row plugins for this style.
+ *     - uses_row_class: Set to TRUE to allow the CSS class settings for rows.
  *     - uses fields: Set to TRUE to have the style plugin accept field
  *       handlers.
  *     - uses grouping: Set to TRUE to allow the grouping settings for rows.
diff --git a/views.module b/views.module
index 19e54fd3a4b8..cb26fa8844ec 100644
--- a/views.module
+++ b/views.module
@@ -26,6 +26,7 @@
 use Drupal\views\Plugins\Type\RowPluginManager;
 use Drupal\views\Plugins\Type\ExposedFormPluginManager;
 use Drupal\views\Plugins\Type\HandlerPluginManager;
+use Drupal\views\Plugins\Type\DisplayExtenderPluginManager;
 
 /**
  * Advertise the current views api version
@@ -459,7 +460,7 @@ function views_menu() {
  */
 function views_menu_alter(&$callbacks) {
   $our_paths = array();
-  $views = views_get_applicable_views('uses hook menu');
+  $views = views_get_applicable_views('uses_hook_menu');
   foreach ($views as $data) {
     list($view, $display_id) = $data;
     $result = $view->execute_hook_menu($display_id, $callbacks);
@@ -673,7 +674,7 @@ function views_block_info() {
     $view->init_display();
     foreach ($view->display as $display_id => $display) {
 
-      if (isset($display->handler) && !empty($display->handler->definition['uses hook block'])) {
+      if (isset($display->handler) && !empty($display->handler->definition['uses_hook_block'])) {
         $result = $display->handler->execute_hook_block_list();
         if (is_array($result)) {
           $items = array_merge($items, $result);
@@ -818,7 +819,7 @@ function views_add_block_contextual_links(&$block, $view, $display_id, $block_ty
  * defined any contextual links that are intended to be displayed in the
  * requested location; if so, it attaches them. The contextual links intended
  * for a particular location are defined by the 'contextual links' and
- * 'contextual links locations' properties in hook_views_plugins() and
+ * 'contextual_links_locations' properties in hook_views_plugins() and
  * hook_views_plugins_alter(); as a result, these hook implementations have
  * full control over where and how contextual links are rendered for each
  * display.
@@ -858,7 +859,7 @@ function views_add_block_contextual_links(&$block, $view, $display_id, $block_ty
  *   If you are rendering a view and its contextual links in another location,
  *   you can pass in a different value for this parameter. However, you will
  *   also need to use hook_views_plugins() or hook_views_plugins_alter() to
- *   declare, via the 'contextual links locations' array key, which view
+ *   declare, via the 'contextual_links_locations' array key, which view
  *   displays support having their contextual links rendered in the location
  *   you have defined.
  * @param $view
@@ -879,14 +880,19 @@ function views_add_contextual_links(&$render_element, $location, $view, $display
     // contextual links that are intended to be displayed in the requested
     // location.
     $plugin = views_fetch_plugin_data('display', $view->display[$display_id]->display_plugin);
-    // If contextual links locations are not set, provide a sane default. (To
+    // If contextual_links_locations are not set, provide a sane default. (To
     // avoid displaying any contextual links at all, a display plugin can still
-    // set 'contextual links locations' to, e.g., an empty array.)
-    $plugin += array('contextual links locations' => array('view'));
+    // set 'contextual_links_locations' to, e.g., {""}.)
+    if (!(isset($plugin['contextual_links_locations']) && $plugin['contextual_links_locations'] = array(""))) {
+      $plugin += array('contextual_links_locations' => array('view'));
+    }
+    else {
+      $plugin['contextual_links_locations'] = array();
+    }
     // On exposed_forms blocks contextual links should always be visible.
-    $plugin['contextual links locations'][] = 'special_block_-exp';
-    $has_links = !empty($plugin['contextual links']) && !empty($plugin['contextual links locations']);
-    if ($has_links && in_array($location, $plugin['contextual links locations'])) {
+    $plugin['contextual_links_locations'][] = 'special_block_-exp';
+    $has_links = !empty($plugin['contextual links']) && !empty($plugin['contextual_links_locations']);
+    if ($has_links && in_array($location, $plugin['contextual_links_locations'])) {
       foreach ($plugin['contextual links'] as $module => $link) {
         $args = array();
         $valid = TRUE;
@@ -1311,9 +1317,9 @@ function views_fetch_data($table = NULL, $move = TRUE, $reset = FALSE) {
 /**
  * Fetch the plugin data from cache.
  */
-function views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
+function views_fetch_plugin_data($type = NULL, $plugin_id = NULL, $reset = FALSE) {
   views_include('cache');
-  return _views_fetch_plugin_data($type, $plugin, $reset);
+  return _views_fetch_plugin_data($type, $plugin_id, $reset);
 }
 
 /**
@@ -1331,23 +1337,22 @@ function views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
  *   A keyed array of in the form of 'base_table' => 'Description'.
  */
 function views_fetch_plugin_names($type, $key = NULL, $base = array()) {
-  $data = views_fetch_plugin_data();
-
-  $plugins[$type] = array();
+  $manager = views_get_plugin_manager($type);
+  $definitions = $manager->getDefinitions();
+  $plugins = array();
 
-  foreach ($data[$type] as $id => $plugin) {
-    // Skip plugins that don't conform to our key.
-    if ($key && (empty($plugin['type']) || $plugin['type'] != $key)) {
-      continue;
-    }
+  foreach ($definitions as $plugin_id => $plugin) {
     if (empty($plugin['no ui']) && (empty($base) || empty($plugin['base']) || array_intersect($base, $plugin['base']))) {
-      $plugins[$type][$id] = $plugin['title'];
+      $plugins[$plugin_id] = $plugin['title'];
+      if (!isset($plugin['title'])) {
+        dsm($plugin);
+      }
     }
   }
 
-  if (!empty($plugins[$type])) {
-    asort($plugins[$type]);
-    return $plugins[$type];
+  if (!empty($plugins)) {
+    asort($plugins);
+    return $plugins;
   }
   // fall-through
   return array();
@@ -1356,16 +1361,22 @@ function views_fetch_plugin_names($type, $key = NULL, $base = array()) {
 /**
  * Get a handler for a plugin
  *
+ * @param string $type
+ *   The plugin type like access or display.
+ * @param string $plugin_id
+ *   The name of the plugin like standard.
+ *
  * @return views_plugin
  *
  * The created plugin object.
  */
-function views_get_plugin($type, $plugin, $reset = FALSE) {
+function views_get_plugin($type, $plugin_id, $reset = FALSE) {
   views_include('handlers');
 
-  $definition = views_fetch_plugin_data($type, $plugin, $reset);
+  $manager = views_get_plugin_manager($type);
+  $definition = $manager->getDefinition($plugin_id);
   if (!empty($definition)) {
-    return _views_create_plugin($type, $plugin, $definition);
+    return _views_create_plugin($type, $plugin_id, $definition);
   }
 }
 
@@ -1413,6 +1424,9 @@ function views_get_plugin_manager($type) {
     case 'localization':
       $manager = new LocalizationPluginManager();
       break;
+    case 'display_extender':
+      $manager = new DisplayExtenderPluginManager();
+      break;
     case 'field':
     case 'filter':
     case 'argument':
@@ -1446,6 +1460,20 @@ function views_get_localization_plugin() {
   return $plugin;
 }
 
+/**
+ * Get enabled display extenders.
+ */
+function views_get_enabled_display_extenders() {
+  $enabled = array_filter((array) config('views.settings')->get('views_display_extenders'));
+  $options = views_fetch_plugin_names('display_extender');
+  foreach ($options as $name => $plugin) {
+    $enabled[$name] = $name;
+  }
+
+  return array_filter($enabled);
+}
+
+
 // -----------------------------------------------------------------------
 // Views database functions
 
@@ -1522,7 +1550,7 @@ function views_get_applicable_views($type) {
     foreach (array_keys($view->display) as $id) {
       $plugin = views_fetch_plugin_data('display', $view->display[$id]->display_plugin);
       if (!empty($plugin[$type])) {
-        // This view uses hook menu. Clone it so that different handlers
+        // This view uses_hook_menu. Clone it so that different handlers
         // don't trip over each other, and add it to the list.
         $v = $view->clone_view();
         if ($v->set_display($id) && $v->display_handler->get_option('enabled')) {
-- 
GitLab