diff --git a/core/lib/Drupal/Component/Annotation/PluginID.php b/core/lib/Drupal/Component/Annotation/PluginID.php
new file mode 100644
index 0000000..dcb27aa
--- /dev/null
+++ b/core/lib/Drupal/Component/Annotation/PluginID.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\Component\Annotation\PluginID.
+ */
+
+namespace Drupal\Component\Annotation;
+
+/**
+ * Defines a Plugin annotation object that just contains an ID.
+ *
+ * @Annotation
+ */
+class PluginID implements AnnotationInterface {
+
+  /**
+   * The plugin ID.
+   *
+   * When an annotation is given no key, 'value' is assumed by Doctrine.
+   *
+   * @var string
+   */
+  public $value;
+
+  /**
+   * Implements \Drupal\Core\Annotation\AnnotationInterface::get().
+   */
+  public function get() {
+    return array(
+      'id' => $this->value,
+    );
+  }
+
+}
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NcsLastUpdated.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NcsLastUpdated.php
index bd0d70a..7562c94 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NcsLastUpdated.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NcsLastUpdated.php
@@ -8,17 +8,14 @@
 namespace Drupal\comment\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\Date;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler for the newer of last comment / node updated.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "ncs_last_updated",
- *   module = "comment"
- * )
+ * @PluginID("ncs_last_updated")
  */
 class NcsLastUpdated extends Date {
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NodeComment.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NodeComment.php
index 30a0a7a..e49c116 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NodeComment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/NodeComment.php
@@ -8,17 +8,14 @@
 namespace Drupal\comment\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\InOperator;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter based on comment node status.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "node_comment",
- *   module = "comment"
- * )
+ * @PluginID("node_comment")
  */
 class NodeComment extends InOperator {
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/UserUid.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/UserUid.php
index b56cd38..b1c83f8 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/UserUid.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/filter/UserUid.php
@@ -8,7 +8,7 @@
 namespace Drupal\comment\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler to accept a user id to check for nodes that user posted or
@@ -16,10 +16,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "comment_user_uid",
- *   module = "comment"
- * )
+ * @PluginID("comment_user_uid")
  */
 class UserUid extends FilterPluginBase {
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastCommentName.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastCommentName.php
index c7021b9..9e2c70e 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastCommentName.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastCommentName.php
@@ -8,7 +8,7 @@
 namespace Drupal\comment\Plugin\views\sort;
 
 use Drupal\views\Plugin\views\sort\SortPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Sort handler to sort by last comment name which might be in 2 different
@@ -16,10 +16,7 @@
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "comment_ncs_last_comment_name",
- *   module = "comment"
- * )
+ * @PluginID("comment_ncs_last_comment_name")
  */
 class NcsLastCommentName extends SortPluginBase {
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastUpdated.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastUpdated.php
index 3af22a9..dfef21a 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastUpdated.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/NcsLastUpdated.php
@@ -8,17 +8,14 @@
 namespace Drupal\comment\Plugin\views\sort;
 
 use Drupal\views\Plugin\views\sort\Date;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Sort handler for the newer of last comment / node updated.
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "ncs_last_updated",
- *   module = "comment"
- * )
+ * @PluginID("ncs_last_updated")
  */
 class NcsLastUpdated extends Date {
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/Thread.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/Thread.php
index 8d28815..1c0d1c5 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/Thread.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/sort/Thread.php
@@ -8,17 +8,14 @@
 namespace Drupal\comment\Plugin\views\sort;
 
 use Drupal\views\Plugin\views\sort\SortPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Sort handler for ordering by thread.
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "comment_thread",
- *   module = "comment"
- * )
+ * @PluginID("comment_thread")
  */
 class Thread extends SortPluginBase {
 
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php b/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php
index 8ef220c..17e143b 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php
@@ -8,17 +8,14 @@
 namespace Drupal\field\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\ManyToOne;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler which uses list-fields as options.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "field_list",
- *   module = "field"
- * )
+ * @PluginID("field_list")
  */
 class FieldList extends ManyToOne {
 
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/relationship/EntityReverse.php b/core/modules/field/lib/Drupal/field/Plugin/views/relationship/EntityReverse.php
index e008c88..6ae2118 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/views/relationship/EntityReverse.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/views/relationship/EntityReverse.php
@@ -10,7 +10,7 @@
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Views;
 
 /**
@@ -18,10 +18,7 @@
  *
  * @ingroup views_relationship_handlers
  *
- * @Plugin(
- *   id = "entity_reverse",
- *   module = "field"
- * )
+ * @PluginID("entity_reverse")
  */
 class EntityReverse extends RelationshipPluginBase  {
 
diff --git a/core/modules/file/lib/Drupal/file/Plugin/views/filter/Status.php b/core/modules/file/lib/Drupal/file/Plugin/views/filter/Status.php
index b6c7867..20439fe 100644
--- a/core/modules/file/lib/Drupal/file/Plugin/views/filter/Status.php
+++ b/core/modules/file/lib/Drupal/file/Plugin/views/filter/Status.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\file\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\filter\InOperator;
 
 /**
@@ -15,10 +15,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "file_status",
- *   module = "file"
- * )
+ * @PluginID("file_status")
  */
 class Status extends InOperator {
 
diff --git a/core/modules/history/lib/Drupal/history/Plugin/views/filter/HistoryUserTimestamp.php b/core/modules/history/lib/Drupal/history/Plugin/views/filter/HistoryUserTimestamp.php
index c76d375..7847ccc 100644
--- a/core/modules/history/lib/Drupal/history/Plugin/views/filter/HistoryUserTimestamp.php
+++ b/core/modules/history/lib/Drupal/history/Plugin/views/filter/HistoryUserTimestamp.php
@@ -8,7 +8,7 @@
 namespace Drupal\history\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter for new content.
@@ -18,10 +18,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "history_user_timestamp",
- *   module = "history"
- * )
+ * @PluginID("history_user_timestamp")
  */
 class HistoryUserTimestamp extends FilterPluginBase {
 
diff --git a/core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php b/core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php
index 5a5da1b..45311ed 100644
--- a/core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php
+++ b/core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php
@@ -8,17 +8,14 @@
 namespace Drupal\language\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\InOperator;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Provides filtering by language.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "language",
- *   module = "language"
- * )
+ * @PluginID("language")
  */
 class LanguageFilter extends InOperator {
 
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
index acacb23..666cf26 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\node\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\area\AreaPluginBase;
 
 /**
@@ -15,10 +15,7 @@
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "node_listing_empty",
- *   module = "node"
- * )
+ * @PluginID("node_listing_empty")
  */
 class ListingEmpty extends AreaPluginBase {
 
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Access.php b/core/modules/node/lib/Drupal/node/Plugin/views/filter/Access.php
index eef38a4..f9e66b9 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Access.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/filter/Access.php
@@ -8,17 +8,14 @@
 namespace Drupal\node\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter by node_access records.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "node_access",
- *   module = "node"
- * )
+ * @PluginID("node_access")
  */
 class Access extends FilterPluginBase {
 
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Status.php b/core/modules/node/lib/Drupal/node/Plugin/views/filter/Status.php
index 6e284e0..3ae361e 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Status.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/filter/Status.php
@@ -8,17 +8,14 @@
 namespace Drupal\node\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter by published status.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "node_status",
- *   module = "node"
- * )
+ * @PluginID("node_status")
  */
 class Status extends FilterPluginBase {
 
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/filter/UidRevision.php b/core/modules/node/lib/Drupal/node/Plugin/views/filter/UidRevision.php
index 8a4cb5f..9ed9fe3 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/filter/UidRevision.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/filter/UidRevision.php
@@ -8,17 +8,14 @@
 namespace Drupal\node\Plugin\views\filter;
 
 use Drupal\user\Plugin\views\filter\Name;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler to check for revisions a certain user has created.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "node_uid_revision",
- *   module = "node"
- * )
+ * @PluginID("node_uid_revision")
  */
 class UidRevision extends Name {
 
diff --git a/core/modules/search/lib/Drupal/search/Plugin/views/filter/Search.php b/core/modules/search/lib/Drupal/search/Plugin/views/filter/Search.php
index 3c961b6..afb7724 100644
--- a/core/modules/search/lib/Drupal/search/Plugin/views/filter/Search.php
+++ b/core/modules/search/lib/Drupal/search/Plugin/views/filter/Search.php
@@ -9,17 +9,14 @@
 
 use Drupal\search\SearchQuery;
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Field handler to provide simple renderer that allows linking to a node.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "search",
- *   module = "search"
- * )
+ * @PluginID("search")
  */
 class Search extends FilterPluginBase {
 
diff --git a/core/modules/search/lib/Drupal/search/Plugin/views/sort/Score.php b/core/modules/search/lib/Drupal/search/Plugin/views/sort/Score.php
index 7ce047e..c547d0e 100644
--- a/core/modules/search/lib/Drupal/search/Plugin/views/sort/Score.php
+++ b/core/modules/search/lib/Drupal/search/Plugin/views/sort/Score.php
@@ -8,17 +8,14 @@
 namespace Drupal\search\Plugin\views\sort;
 
 use Drupal\views\Plugin\views\sort\SortPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Field handler to provide simple renderer that allows linking to a node.
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "search_score",
- *   module = "search"
- * )
+ * @PluginID("search_score")
  */
 class Score extends SortPluginBase {
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
index 856254a..f485ac6 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
@@ -9,7 +9,7 @@
 
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\filter\ManyToOne;
 
 /**
@@ -17,10 +17,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "taxonomy_index_tid",
- *   module = "taxonomy"
- * )
+ * @PluginID("taxonomy_index_tid")
  */
 class TaxonomyIndexTid extends ManyToOne {
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
index 6329e85..4ceb482 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\taxonomy\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler for taxonomy terms with depth.
@@ -17,10 +17,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "taxonomy_index_tid_depth",
- *   module = "taxonomy"
- * )
+ * @PluginID("taxonomy_index_tid_depth")
  */
 class TaxonomyIndexTidDepth extends TaxonomyIndexTid {
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/relationship/NodeTermData.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/relationship/NodeTermData.php
index 91d78ea..f365c3a 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/relationship/NodeTermData.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/relationship/NodeTermData.php
@@ -10,17 +10,14 @@
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Relationship handler to return the taxonomy terms of nodes.
  *
  * @ingroup views_relationship_handlers
  *
- * @Plugin(
- *   id = "node_term_data",
- *   module = "taxonomy"
- * )
+ * @PluginID("node_term_data")
  */
 class NodeTermData extends RelationshipPluginBase  {
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Current.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Current.php
index 322308f..26dfd9a 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Current.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Current.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\user\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\filter\BooleanOperator;
@@ -17,10 +17,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "user_current",
- *   module = "user"
- * )
+ * @PluginID("user_current")
  */
 class Current extends BooleanOperator {
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
index 9d95b65..8c5104c 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
@@ -8,17 +8,14 @@
 namespace Drupal\user\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\InOperator;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler for usernames.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "user_name",
- *   module = "user"
- * )
+ * @PluginID("user_name")
  */
 class Name extends InOperator {
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
index cf71ac2..54f24f8 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\user\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\filter\ManyToOne;
 
 /**
@@ -15,10 +15,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "user_permissions",
- *   module = "user"
- * )
+ * @PluginID("user_permissions")
  */
 class Permissions extends ManyToOne {
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
index a4c2dda..4aa9d53 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\user\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\filter\ManyToOne;
 
 /**
@@ -15,10 +15,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "user_roles",
- *   module = "user"
- * )
+ * @PluginID("user_roles")
  */
 class Roles extends ManyToOne {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Discovery/ViewsHandlerDiscovery.php b/core/modules/views/lib/Drupal/views/Plugin/Discovery/ViewsHandlerDiscovery.php
new file mode 100644
index 0000000..b23fed2
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Plugin/Discovery/ViewsHandlerDiscovery.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Plugin\Discovery\ViewsHandlerDiscovery.
+ */
+
+namespace Drupal\views\Plugin\Discovery;
+
+use Drupal\Component\Plugin\Discovery\AnnotatedClassDiscovery;
+
+/**
+ * Defines a discovery mechanism to find Views handlers in PSR-0 namespaces.
+ */
+class ViewsHandlerDiscovery extends AnnotatedClassDiscovery {
+
+  /**
+   * The type of handler being discovered.
+   *
+   * @var string
+   */
+  protected $type;
+
+  /**
+   * Constructs a ViewsHandlerDiscovery object.
+   *
+   * @param string $type
+   *   The plugin type, for example filter.
+   * @param array $root_namespaces
+   *   (optional) Array of root paths keyed by the corresponding namespace to
+   *   look for plugin implementations, \Plugin\views\$type will be appended to
+   *   each namespace.
+   */
+  function __construct($type, array $root_namespaces = array()) {
+    $this->type = $type;
+    $annotation_namespaces = array(
+      'Drupal\views\Annotation' => DRUPAL_ROOT . '/core/modules/views/lib',
+    );
+    $plugin_namespaces = array();
+    foreach ($root_namespaces as $namespace => $dir) {
+      $plugin_namespaces["$namespace\\Plugin\\views\\{$type}"] = array($dir);
+    }
+    parent::__construct($plugin_namespaces, $annotation_namespaces, 'Drupal\Component\Annotation\PluginID');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefinitions() {
+    // Add the plugin_type to the definition.
+    $definitions = parent::getDefinitions();
+    array_walk($definitions, function (&$definition, $key, $type) {
+      $definition['plugin_type'] = $type;
+    }, $this->type);
+    return $definitions;
+  }
+
+}
diff --git a/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php b/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php
new file mode 100644
index 0000000..b515452
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Plugin\ViewsHandlerManager.
+ */
+
+namespace Drupal\views\Plugin;
+
+use Drupal\Component\Plugin\PluginManagerBase;
+use Drupal\Component\Plugin\Factory\DefaultFactory;
+use Drupal\Core\Plugin\Discovery\CacheDecorator;
+use Drupal\views\Plugin\Discovery\ViewsHandlerDiscovery;
+
+/**
+ * Plugin type manager for all views handlers.
+ */
+class ViewsHandlerManager extends PluginManagerBase {
+
+  /**
+   * Constructs a ViewsHandlerManager object.
+   *
+   * @param string $type
+   *   The plugin type, for example filter.
+   * @param array $namespaces
+   *   (optional) An array of paths keyed by it's corresponding namespaces.
+   */
+  public function __construct($type, array $namespaces = array()) {
+    $this->discovery = new ViewsHandlerDiscovery($type, $namespaces);
+    $this->discovery = new CacheDecorator($this->discovery, "views:$type", 'views_info');
+
+    $this->factory = new DefaultFactory($this->discovery);
+  }
+
+}
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
index 39fc9d0..64a63a0 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * A special handler to take the place of missing or broken handlers.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "broken"
- * )
+ * @PluginID("broken")
  */
 class Broken extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Entity.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Entity.php
index 200cecb..4a41d0a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Entity.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Entity.php
@@ -9,7 +9,7 @@
 
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\area\AreaPluginBase;
 
 /**
@@ -17,10 +17,7 @@
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "entity",
- *   module = "views"
- * )
+ * @PluginID("entity")
  */
 class Entity extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
index d619650..81f6e85 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Views area handler to display some configurable result summary.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "result"
- * )
+ * @PluginID("result")
  */
 class Result extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
index 7495933..4c926ad 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Views area text handler.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "text"
- * )
+ * @PluginID("text")
  */
 class Text extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
index 754dd4f..002537a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Views area text handler.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "text_custom"
- * )
+ * @PluginID("text_custom")
  */
 class TextCustom extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
index 56950a6..7ee0197 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Views area title override handler.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "title"
- * )
+ * @PluginID("title")
  */
 class Title extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
index 7d5e994..26cce16 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\area;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Views area handlers. Insert a view inside of an area.
  *
  * @ingroup views_area_handlers
  *
- * @Plugin(
- *   id = "view"
- * )
+ * @PluginID("view")
  */
 class View extends AreaPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
index 20ee145..e5327f1 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
 
@@ -27,9 +27,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "boolean"
- * )
+ * @PluginID("boolean")
  */
 class BooleanOperator extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
index 2e6f467..d19fc6a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Simple filter to handle matching of boolean values.
@@ -20,9 +20,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "boolean_string"
- * )
+ * @PluginID("boolean_string")
  */
 class BooleanOperatorString extends BooleanOperator {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Broken.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Broken.php
index 2ece6ca..701cabb 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Broken.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Broken.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
 
@@ -16,9 +16,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "broken"
- * )
+ * @PluginID("broken")
  */
 class Broken extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Bundle.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Bundle.php
index 0fbe8d2..1ce3e95 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Bundle.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Bundle.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 
@@ -16,9 +16,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "bundle"
- * )
+ * @PluginID("bundle")
  */
 class Bundle extends InOperator {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Combine.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Combine.php
index cbb08b9..895c15e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Combine.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Combine.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter handler which allows to search on multiple fields.
  *
  * @ingroup views_field_handlers
  *
- * @Plugin(
- *   id = "combine"
- * )
+ * @PluginID("combine")
  */
 class Combine extends String {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Date.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Date.php
index ae01e3b..ea46efc 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Date.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Date.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Filter to handle dates stored as a timestamp.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "date"
- * )
+ * @PluginID("date")
  */
 class Date extends Numeric {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Equality.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Equality.php
index 541fca4..f6af850 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Equality.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Equality.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Simple filter to handle equal to / not equal to filters
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "equality"
- * )
+ * @PluginID("equality")
  */
 class Equality extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
index 559b183..02aad33 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Simple filter to handle greater than/less than filters
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "groupby_numeric"
- * )
+ * @PluginID("groupby_numeric")
  */
 class GroupByNumeric extends Numeric {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/InOperator.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/InOperator.php
index 5508f66..dfe89ea 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/InOperator.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/InOperator.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
 
@@ -20,9 +20,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "in_operator"
- * )
+ * @PluginID("in_operator")
  */
 class InOperator extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/ManyToOne.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/ManyToOne.php
index c8b0111..1f3a672 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/ManyToOne.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/ManyToOne.php
@@ -10,7 +10,7 @@
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ManyToOneHelper;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Complex filter to handle filtering for many to one relationships,
@@ -22,9 +22,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "many_to_one"
- * )
+ * @PluginID("many_to_one")
  */
 class ManyToOne extends InOperator {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Numeric.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Numeric.php
index e6b27cf..3c2f753 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Numeric.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Numeric.php
@@ -8,16 +8,14 @@
 namespace Drupal\views\Plugin\views\filter;
 
 use Drupal\Core\Database\Database;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Simple filter to handle greater than/less than filters
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "numeric"
- * )
+ * @PluginID("numeric")
  */
 class Numeric extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Standard.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Standard.php
index 4baee72..a2328f3 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/Standard.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/Standard.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Default implementation of the base filter plugin.
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "standard"
- * )
+ * @PluginID("standard")
  */
 class Standard extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/String.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/String.php
index be3e132..c80e39d 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/String.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/String.php
@@ -8,7 +8,7 @@
 namespace Drupal\views\Plugin\views\filter;
 
 use Drupal\Core\Database\Database;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Basic textfield filter to handle string filtering commands
@@ -16,9 +16,7 @@
  *
  * @ingroup views_filter_handlers
  *
- * @Plugin(
- *   id = "string"
- * )
+ * @PluginID("string")
  */
 class String extends FilterPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/join/Standard.php b/core/modules/views/lib/Drupal/views/Plugin/views/join/Standard.php
index 323d339..e4977d7 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/join/Standard.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/join/Standard.php
@@ -7,14 +7,12 @@
 
 namespace Drupal\views\Plugin\views\join;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Default implementation of the join plugin.
  *
- * @Plugin(
- *   id = "standard"
- * )
+ * @PluginID("standard")
  */
 class Standard extends JoinPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/join/Subquery.php b/core/modules/views/lib/Drupal/views/Plugin/views/join/Subquery.php
index 0cb03c9..5faa8dc 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/join/Subquery.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/join/Subquery.php
@@ -6,7 +6,7 @@
  */
 
 namespace Drupal\views\Plugin\views\join;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Join handler for relationships that join with a subquery as the left field.
@@ -17,9 +17,7 @@
  *   same as Join class above, except:
  *   - left_query: The subquery to use in the left side of the join clause.
  *
- * @Plugin(
- *   id = "subquery"
- * )
+ * @PluginID"subquery")
  */
 class Subquery extends JoinPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Broken.php b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Broken.php
index afddb4a..c891f00 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Broken.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Broken.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\relationship;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * A special handler to take the place of missing or broken handlers.
  *
  * @ingroup views_relationship_handlers
  *
- * @Plugin(
- *   id = "broken"
- * )
+ * @PluginID("broken")
  */
 class Broken extends RelationshipPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
index 87376ee..b5c236d 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Views;
 
 /**
@@ -60,9 +60,7 @@
  *
  * @ingroup views_relationship_handlers
  *
- * @Plugin(
- *   id = "groupwise_max"
- * )
+ * @PluginID("groupwise_max")
  */
 class GroupwiseMax extends RelationshipPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Standard.php b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Standard.php
index 9cd47e5..c5fa8aa 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Standard.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/Standard.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\relationship;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Default implementation of the base relationship plugin.
  *
  * @ingroup views_relationship_handlers
  *
- * @Plugin(
- *   id = "standard"
- * )
+ * @PluginID("standard")
  */
 class Standard extends RelationshipPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Broken.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Broken.php
index 25ab695..341bc8b 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Broken.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Broken.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * A special handler to take the place of missing or broken handlers.
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "broken"
- * )
+ * @PluginID("broken")
  */
 class Broken extends SortPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Date.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Date.php
index 6ccd5fe..c65768e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Date.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Date.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Basic sort handler for dates.
@@ -15,9 +15,7 @@
  * This handler enables granularity, which is the ability to make dates
  * equivalent based upon nearness.
  *
- * @Plugin(
- *   id = "date"
- * )
+ * @PluginID("date")
  */
 class Date extends SortPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
index f0989f5..ad270f1 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\ViewExecutable;
 
 /**
  * Handler for GROUP BY on simple numeric fields.
  *
- * @Plugin(
- *   id = "groupby_numeric"
- * )
+ * @PluginID("groupby_numeric")
  */
 class GroupByNumeric extends SortPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
index 756b960..d1cdb69 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Views;
 
 
@@ -20,9 +20,7 @@
  *
  * This is only really useful for the {menu_links} table.
  *
- * @Plugin(
- *   id = "menu_hierarchy"
- * )
+ * @PluginID("menu_hierarchy")
  */
 class MenuHierarchy extends SortPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Random.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Random.php
index 66792b5..fdc7db9 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Random.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Random.php
@@ -7,14 +7,12 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Handle a random sort.
  *
- * @Plugin(
- *   id = "random"
- * )
+ * @PluginID("random")
  */
 class Random extends SortPluginBase {
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Standard.php b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Standard.php
index 038d47c..1a6cf69 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/sort/Standard.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/sort/Standard.php
@@ -7,16 +7,14 @@
 
 namespace Drupal\views\Plugin\views\sort;
 
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Default implementation of the base sort plugin.
  *
  * @ingroup views_sort_handlers
  *
- * @Plugin(
- *   id = "standard"
- * )
+ * @PluginID("standard")
  */
 class Standard extends SortPluginBase {
 
diff --git a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
index 38ec004..8c7a7c0 100644
--- a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
+++ b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
@@ -8,16 +8,14 @@
 namespace Drupal\views_test_data\Plugin\views\area;
 
 use Drupal\views\Plugin\views\area\AreaPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 
 /**
  * Test area plugin.
  *
  * @see Drupal\views\Tests\Handler\AreaTest
  *
- * @Plugin(
- *   id = "test_example"
- * )
+ * @PluginID("test_example")
  */
 class TestExample extends AreaPluginBase {
 
diff --git a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/filter/FilterTest.php b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/filter/FilterTest.php
index 6868262..86f8214 100644
--- a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/filter/FilterTest.php
+++ b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/filter/FilterTest.php
@@ -7,18 +7,11 @@
 
 namespace Drupal\views_test_data\Plugin\views\filter;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
 
 /**
- * @Plugin(
- *   id = "test_filter",
- *   title = @Translation("Test filter plugin"),
- *   help = @Translation("Provides a generic filter test plugin."),
- *   base = "node",
- *   type = "type"
- * )
+ * @PluginID("test_filter")
  */
 class FilterTest extends FilterPluginBase {
 
diff --git a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
index 728d861..e1c525c 100644
--- a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
+++ b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
@@ -8,16 +8,13 @@
 namespace Drupal\views_test_data\Plugin\views\join;
 
 use Drupal\views\Plugin\views\join\JoinPluginBase;
-use Drupal\Component\Annotation\Plugin;
+use Drupal\Component\Annotation\PluginID;
 use Drupal\Core\Annotation\Translation;
 
 /**
  * Defines a join test plugin.
  *
- * @Plugin(
- *   id = "join_test",
- *   title = @Translation("Join test")
- * )
+ * @PluginID("join_test")
  */
 class JoinTest extends JoinPluginBase {
   /**
diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml
index 633db50..7bf07a2 100644
--- a/core/modules/views/views.services.yml
+++ b/core/modules/views/views.services.yml
@@ -3,7 +3,7 @@ services:
     class: Drupal\views\Plugin\ViewsPluginManager
     arguments: [access, '%container.namespaces%']
   plugin.manager.views.area:
-    class: Drupal\views\Plugin\ViewsPluginManager
+    class: Drupal\views\Plugin\ViewsHandlerManager
     arguments: [area, '%container.namespaces%']
   plugin.manager.views.argument:
     class: Drupal\views\Plugin\ViewsPluginManager
@@ -30,10 +30,10 @@ services:
     class: Drupal\views\Plugin\ViewsPluginManager
     arguments: [field, '%container.namespaces%']
   plugin.manager.views.filter:
-    class: Drupal\views\Plugin\ViewsPluginManager
+    class: Drupal\views\Plugin\ViewsHandlerManager
     arguments: [filter, '%container.namespaces%']
   plugin.manager.views.join:
-    class: Drupal\views\Plugin\ViewsPluginManager
+    class: Drupal\views\Plugin\ViewsHandlerManager
     arguments: [join, '%container.namespaces%']
   plugin.manager.views.pager:
     class: Drupal\views\Plugin\ViewsPluginManager
@@ -42,13 +42,13 @@ services:
     class: Drupal\views\Plugin\ViewsPluginManager
     arguments: [query, '%container.namespaces%']
   plugin.manager.views.relationship:
-    class: Drupal\views\Plugin\ViewsPluginManager
+    class: Drupal\views\Plugin\ViewsHandlerManager
     arguments: [relationship, '%container.namespaces%']
   plugin.manager.views.row:
     class: Drupal\views\Plugin\ViewsPluginManager
     arguments: [row, '%container.namespaces%']
   plugin.manager.views.sort:
-    class: Drupal\views\Plugin\ViewsPluginManager
+    class: Drupal\views\Plugin\ViewsHandlerManager
     arguments: [sort, '%container.namespaces%']
   plugin.manager.views.style:
     class: Drupal\views\Plugin\ViewsPluginManager
