From 181221a429a756c4f3e840a41d784542bca1e802 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Thu, 4 Apr 2024 22:50:02 +0100
Subject: [PATCH] Issue #3421000 by sorlov, quietone, smustgrave, larowlan,
 alexpott: Convert ViewsWizard plugin discovery to attributes

---
 .../src/Plugin/views/wizard/BlockContent.php  | 13 ++++---
 .../src/Plugin/views/wizard/Comment.php       | 13 ++++---
 .../src/Plugin/views/wizard/Watchdog.php      | 14 +++----
 .../file/src/Plugin/views/wizard/File.php     | 13 ++++---
 .../media/src/Plugin/views/wizard/Media.php   | 13 ++++---
 .../src/Plugin/views/wizard/MediaRevision.php | 13 ++++---
 .../node/src/Plugin/views/wizard/Node.php     | 13 ++++---
 .../src/Plugin/views/wizard/NodeRevision.php  | 13 ++++---
 .../src/Plugin/views/wizard/TaxonomyTerm.php  | 13 ++++---
 .../user/src/Plugin/views/wizard/Users.php    | 13 ++++---
 .../views/src/Attribute/ViewsWizard.php       | 39 +++++++++++++++++++
 .../src/Plugin/views/wizard/Standard.php      | 15 ++++---
 12 files changed, 118 insertions(+), 67 deletions(-)
 create mode 100644 core/modules/views/src/Attribute/ViewsWizard.php

diff --git a/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php b/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php
index cb19c6247dcf..eb2de7e50c2a 100644
--- a/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php
+++ b/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php
@@ -2,17 +2,18 @@
 
 namespace Drupal\block_content\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Used for creating 'block_content' views with the wizard.
- *
- * @ViewsWizard(
- *   id = "block_content",
- *   base_table = "block_content_field_data",
- *   title = @Translation("Content Block"),
- * )
  */
+#[ViewsWizard(
+  id: 'block_content',
+  title: new TranslatableMarkup('Content Block'),
+  base_table: 'block_content_field_data'
+)]
 class BlockContent extends WizardPluginBase {
 
   /**
diff --git a/core/modules/comment/src/Plugin/views/wizard/Comment.php b/core/modules/comment/src/Plugin/views/wizard/Comment.php
index 7cc5c632cc05..3e662475b401 100644
--- a/core/modules/comment/src/Plugin/views/wizard/Comment.php
+++ b/core/modules/comment/src/Plugin/views/wizard/Comment.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\comment\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
@@ -10,13 +12,12 @@
 
 /**
  * Tests creating comment views with the wizard.
- *
- * @ViewsWizard(
- *   id = "comment",
- *   base_table = "comment_field_data",
- *   title = @Translation("Comments")
- * )
  */
+#[ViewsWizard(
+  id: 'comment',
+  base_table: 'comment_field_data',
+  title: new TranslatableMarkup('Comments')
+)]
 class Comment extends WizardPluginBase {
 
   /**
diff --git a/core/modules/dblog/src/Plugin/views/wizard/Watchdog.php b/core/modules/dblog/src/Plugin/views/wizard/Watchdog.php
index 3a0dad5c86dd..ac78fe828bcc 100644
--- a/core/modules/dblog/src/Plugin/views/wizard/Watchdog.php
+++ b/core/modules/dblog/src/Plugin/views/wizard/Watchdog.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\dblog\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Defines a wizard for the watchdog table.
- *
- * @ViewsWizard(
- *   id = "watchdog",
- *   module = "dblog",
- *   base_table = "watchdog",
- *   title = @Translation("Log entries")
- * )
  */
+#[ViewsWizard(
+  id: 'watchdog',
+  title: new TranslatableMarkup('Log entries'),
+  base_table: 'watchdog'
+)]
 class Watchdog extends WizardPluginBase {
 
   /**
diff --git a/core/modules/file/src/Plugin/views/wizard/File.php b/core/modules/file/src/Plugin/views/wizard/File.php
index f870f6576a06..2d1d8a5cf382 100644
--- a/core/modules/file/src/Plugin/views/wizard/File.php
+++ b/core/modules/file/src/Plugin/views/wizard/File.php
@@ -2,17 +2,18 @@
 
 namespace Drupal\file\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Tests creating managed files views with the wizard.
- *
- * @ViewsWizard(
- *   id = "file_managed",
- *   base_table = "file_managed",
- *   title = @Translation("Files")
- * )
  */
+#[ViewsWizard(
+  id: 'file_managed',
+  title: new TranslatableMarkup('Files'),
+  base_table: 'file_managed'
+)]
 class File extends WizardPluginBase {
 
   /**
diff --git a/core/modules/media/src/Plugin/views/wizard/Media.php b/core/modules/media/src/Plugin/views/wizard/Media.php
index 30a7ad632381..322f04fc2885 100644
--- a/core/modules/media/src/Plugin/views/wizard/Media.php
+++ b/core/modules/media/src/Plugin/views/wizard/Media.php
@@ -2,17 +2,18 @@
 
 namespace Drupal\media\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Provides Views creation wizard for Media.
- *
- * @ViewsWizard(
- *   id = "media",
- *   base_table = "media_field_data",
- *   title = @Translation("Media")
- * )
  */
+#[ViewsWizard(
+  id: 'media',
+  base_table: 'media_field_data',
+  title: new TranslatableMarkup('Media')
+)]
 class Media extends WizardPluginBase {
 
   /**
diff --git a/core/modules/media/src/Plugin/views/wizard/MediaRevision.php b/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
index 10b51547b9d4..f7a2aafee23e 100644
--- a/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
+++ b/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
@@ -2,17 +2,18 @@
 
 namespace Drupal\media\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Provides Views creation wizard for Media revisions.
- *
- * @ViewsWizard(
- *   id = "media_revision",
- *   base_table = "media_field_revision",
- *   title = @Translation("Media revisions")
- * )
  */
+#[ViewsWizard(
+  id: 'media_revision',
+  title: new TranslatableMarkup('Media revisions'),
+  base_table: 'media_field_revision'
+)]
 class MediaRevision extends WizardPluginBase {
 
   /**
diff --git a/core/modules/node/src/Plugin/views/wizard/Node.php b/core/modules/node/src/Plugin/views/wizard/Node.php
index ea0081086235..6e2ca1d1f2d6 100644
--- a/core/modules/node/src/Plugin/views/wizard/Node.php
+++ b/core/modules/node/src/Plugin/views/wizard/Node.php
@@ -8,6 +8,8 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Menu\MenuParentFormSelectorInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -17,13 +19,12 @@
 
 /**
  * Tests creating node views with the wizard.
- *
- * @ViewsWizard(
- *   id = "node",
- *   base_table = "node_field_data",
- *   title = @Translation("Content")
- * )
  */
+#[ViewsWizard(
+  id: 'node',
+  base_table: 'node_field_data',
+  title: new TranslatableMarkup('Content')
+)]
 class Node extends WizardPluginBase {
 
   /**
diff --git a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
index 14119d4fb565..1a7121eb007a 100644
--- a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
+++ b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
@@ -3,6 +3,8 @@
 namespace Drupal\node\Plugin\views\wizard;
 
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
@@ -11,13 +13,12 @@
 
 /**
  * Tests creating node revision views with the wizard.
- *
- * @ViewsWizard(
- *   id = "node_revision",
- *   base_table = "node_field_revision",
- *   title = @Translation("Content revisions")
- * )
  */
+#[ViewsWizard(
+  id: 'node_revision',
+  title: new TranslatableMarkup('Content revisions'),
+  base_table: 'node_field_revision'
+)]
 class NodeRevision extends WizardPluginBase {
 
   /**
diff --git a/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php b/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php
index cc79681093d4..751f365c493e 100644
--- a/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php
+++ b/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php
@@ -2,17 +2,18 @@
 
 namespace Drupal\taxonomy\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
  * Tests creating taxonomy views with the wizard.
- *
- * @ViewsWizard(
- *   id = "taxonomy_term",
- *   base_table = "taxonomy_term_field_data",
- *   title = @Translation("Taxonomy terms")
- * )
  */
+#[ViewsWizard(
+  id: 'taxonomy_term',
+  title: new TranslatableMarkup('Taxonomy terms'),
+  base_table: 'taxonomy_term_field_data'
+)]
 class TaxonomyTerm extends WizardPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/views/wizard/Users.php b/core/modules/user/src/Plugin/views/wizard/Users.php
index 6ba045f70d99..92b8f28d901c 100644
--- a/core/modules/user/src/Plugin/views/wizard/Users.php
+++ b/core/modules/user/src/Plugin/views/wizard/Users.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\user\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 
 /**
@@ -10,13 +12,12 @@
 
 /**
  * Tests creating user views with the wizard.
- *
- * @ViewsWizard(
- *   id = "users",
- *   base_table = "users_field_data",
- *   title = @Translation("Users")
- * )
  */
+#[ViewsWizard(
+  id: 'users',
+  title: new TranslatableMarkup('Users'),
+  base_table: 'users_field_data'
+)]
 class Users extends WizardPluginBase {
 
   /**
diff --git a/core/modules/views/src/Attribute/ViewsWizard.php b/core/modules/views/src/Attribute/ViewsWizard.php
new file mode 100644
index 000000000000..e5ef222bb07b
--- /dev/null
+++ b/core/modules/views/src/Attribute/ViewsWizard.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\views\Attribute;
+
+use Drupal\Component\Plugin\Attribute\Plugin;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+
+/**
+ * Defines a Plugin attribute object for views wizard plugins.
+ *
+ * @see \Drupal\views\Plugin\views\wizard\WizardPluginBase
+ * @see \Drupal\views\Plugin\views\wizard\WizardInterface
+ *
+ * @ingroup views_wizard_plugins
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class ViewsWizard extends Plugin {
+
+  /**
+   * Constructs an ViewsWizard attribute.
+   *
+   * @param string $id
+   *   The plugin ID.
+   * @param \Drupal\Core\StringTranslation\TranslatableMarkup $title
+   *   The plugin title used in the views UI.
+   * @param string|null $base_table
+   *   (optional) The base table on which this wizard is used. The base_table is
+   *   required when a deriver class is not defined.
+   * @param class-string|null $deriver
+   *   (optional) The deriver class.
+   */
+  public function __construct(
+    public readonly string $id,
+    public readonly TranslatableMarkup $title,
+    public readonly ?string $base_table = NULL,
+    public readonly ?string $deriver = NULL
+  ) {}
+
+}
diff --git a/core/modules/views/src/Plugin/views/wizard/Standard.php b/core/modules/views/src/Plugin/views/wizard/Standard.php
index a277fbd1a223..30875ed7570d 100644
--- a/core/modules/views/src/Plugin/views/wizard/Standard.php
+++ b/core/modules/views/src/Plugin/views/wizard/Standard.php
@@ -2,17 +2,20 @@
 
 namespace Drupal\views\Plugin\views\wizard;
 
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\views\Attribute\ViewsWizard;
+use Drupal\views\Plugin\Derivative\DefaultWizardDeriver;
+
 /**
  * Standard Views wizard plugin.
  *
  * @ingroup views_wizard_plugins
- *
- * @ViewsWizard(
- *   id = "standard",
- *   deriver = "Drupal\views\Plugin\Derivative\DefaultWizardDeriver",
- *   title = @Translation("Default wizard")
- * )
  */
+#[ViewsWizard(
+  id: 'standard',
+  title: new TranslatableMarkup('Default wizard'),
+  deriver: DefaultWizardDeriver::class,
+)]
 class Standard extends WizardPluginBase {
 
 }
-- 
GitLab