From ee650b2e7f74aa9be93b3feedfda2d71fb41cdc2 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Sat, 6 Apr 2024 11:04:51 +0100
Subject: [PATCH] Issue #3421016 by quietone, godotislate: Convert
 MigrateProcessPlugin plugin discovery to attributes

(cherry picked from commit 8c0975a467c474a2f6457eba2f0668ea9e9aa284)
---
 .../block/src/Plugin/migrate/process/BlockPluginId.php |  7 ++-----
 .../block/src/Plugin/migrate/process/BlockRegion.php   |  7 ++-----
 .../block/src/Plugin/migrate/process/BlockSettings.php |  6 +++---
 .../block/src/Plugin/migrate/process/BlockTheme.php    |  7 ++-----
 .../src/Plugin/migrate/process/BlockVisibility.php     |  7 ++-----
 .../block/src/Plugin/migrate/process/RolesLookup.php   |  6 ++----
 .../field/src/Plugin/migrate/process/FieldType.php     |  7 ++-----
 .../field/src/Plugin/migrate/process/ProcessField.php  |  6 ++----
 .../process/d6/FieldFormatterSettingsDefaults.php      |  6 ++----
 .../migrate/process/d6/FieldInstanceDefaults.php       |  6 +++---
 .../process/d6/FieldInstanceOptionTranslation.php      | 10 +++++-----
 .../migrate/process/d6/FieldInstanceSettings.php       |  6 +++---
 .../migrate/process/d6/FieldInstanceWidgetSettings.php |  6 ++----
 .../migrate/process/d6/FieldOptionTranslation.php      | 10 +++++-----
 .../src/Plugin/migrate/process/d6/FieldSettings.php    |  6 ++----
 .../Plugin/migrate/process/d6/FieldTypeDefaults.php    |  6 ++----
 .../src/Plugin/migrate/process/d7/FieldBundle.php      |  6 ++----
 .../migrate/process/d7/FieldInstanceDefaults.php       |  7 ++-----
 .../process/d7/FieldInstanceOptionTranslation.php      | 10 +++++-----
 .../migrate/process/d7/FieldInstanceSettings.php       |  8 +++++---
 .../migrate/process/d7/FieldOptionTranslation.php      | 10 +++++-----
 .../src/Plugin/migrate/process/d7/FieldSettings.php    |  7 ++-----
 .../Plugin/migrate/process/d7/FieldTypeDefaults.php    |  6 ++----
 .../file/src/Plugin/migrate/process/d6/FieldFile.php   |  7 ++-----
 .../file/src/Plugin/migrate/process/d6/FileUri.php     |  6 ++----
 .../filter/src/Plugin/migrate/process/FilterID.php     |  6 +++---
 .../src/Plugin/migrate/process/FilterSettings.php      | 10 +++++-----
 .../migrate/process/d6/FilterFormatPermission.php      | 10 +++++-----
 .../src/Plugin/migrate/process/ForumVocabulary.php     |  6 ++----
 .../Plugin/migrate/process/d6/ImageCacheActions.php    |  6 +++---
 .../process/ContentTranslationEnabledSetting.php       |  6 ++----
 .../src/Plugin/migrate/process/LanguageDomains.php     | 10 +++++-----
 .../src/Plugin/migrate/process/LanguageNegotiation.php | 10 +++++-----
 .../src/Plugin/migrate/process/LanguageTypes.php       | 10 +++++-----
 .../link/src/Plugin/migrate/process/FieldLink.php      |  6 ++----
 .../src/Plugin/migrate/process/LinkOptions.php         | 10 +++++-----
 .../src/Plugin/migrate/process/LinkUri.php             |  6 ++----
 .../migrate/src/Plugin/migrate/process/ArrayBuild.php  | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/Callback.php    |  6 ++----
 .../migrate/src/Plugin/migrate/process/Concat.php      | 10 +++++-----
 .../src/Plugin/migrate/process/DefaultValue.php        | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/Download.php    |  6 ++----
 .../src/Plugin/migrate/process/EntityExists.php        |  8 +++-----
 .../migrate/src/Plugin/migrate/process/Extract.php     | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/FileCopy.php    |  6 ++----
 .../migrate/src/Plugin/migrate/process/Flatten.php     | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/FormatDate.php  |  6 ++----
 .../modules/migrate/src/Plugin/migrate/process/Get.php | 10 +++++-----
 .../modules/migrate/src/Plugin/migrate/process/Log.php |  6 ++----
 .../migrate/src/Plugin/migrate/process/MachineName.php |  6 ++----
 .../Plugin/migrate/process/MakeUniqueEntityField.php   |  6 ++----
 .../src/Plugin/migrate/process/MenuLinkParent.php      |  6 ++----
 .../src/Plugin/migrate/process/MigrationLookup.php     |  6 ++----
 .../src/Plugin/migrate/process/NullCoalesce.php        |  6 ++----
 .../migrate/src/Plugin/migrate/process/Route.php       |  7 +++----
 .../migrate/src/Plugin/migrate/process/SkipOnEmpty.php |  6 ++----
 .../src/Plugin/migrate/process/SkipRowIfNotSet.php     | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/StaticMap.php   |  6 ++----
 .../migrate/src/Plugin/migrate/process/SubProcess.php  | 10 +++++-----
 .../migrate/src/Plugin/migrate/process/Substr.php      |  6 ++----
 .../migrate/src/Plugin/migrate/process/UrlEncode.php   |  6 ++----
 .../src/Plugin/migrate/process/TestSkipRowProcess.php  |  6 ++----
 .../Plugin/migrate/process/NodeCompleteNodeLookup.php  |  6 ++----
 .../migrate/process/NodeCompleteNodeRevisionLookup.php |  6 ++----
 .../process/NodeCompleteNodeTranslationLookup.php      |  6 ++----
 .../src/Plugin/migrate/process/d6/NodeUpdate7008.php   |  6 ++----
 .../src/Plugin/migrate/process/PathSetTranslated.php   |  6 ++----
 .../src/Plugin/migrate/process/ImageStyleMappings.php  |  6 ++----
 .../migrate/process/SearchConfigurationRankings.php    |  6 ++----
 .../src/Plugin/migrate/process/d6/SystemUpdate7000.php |  6 ++----
 .../system/src/Plugin/migrate/process/d6/TimeZone.php  |  6 ++----
 .../src/Plugin/migrate/process/TargetBundle.php        |  6 ++----
 .../user/src/Plugin/migrate/process/ConvertTokens.php  | 10 +++++-----
 .../Plugin/migrate/process/ProfileFieldSettings.php    |  7 ++-----
 .../user/src/Plugin/migrate/process/UserLangcode.php   |  6 ++----
 .../user/src/Plugin/migrate/process/UserUpdate8002.php |  6 ++----
 .../process/d6/ProfileFieldOptionTranslation.php       | 10 +++++-----
 .../src/Plugin/migrate/process/d6/UserUpdate7002.php   |  6 ++----
 78 files changed, 226 insertions(+), 336 deletions(-)

diff --git a/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php b/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
index 41524821b68e..33bcfef2fccf 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -11,11 +12,7 @@
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "block_plugin_id"
- * )
- */
+#[MigrateProcess('block_plugin_id')]
 class BlockPluginId extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockRegion.php b/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
index cd79f051bcbe..f60471ca7027 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
@@ -3,16 +3,13 @@
 namespace Drupal\block\Plugin\migrate\process;
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\migrate\process\StaticMap;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "block_region"
- * )
- */
+#[MigrateProcess('block_region')]
 class BlockRegion extends StaticMap implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockSettings.php b/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
index 09c30b1f2cbe..e88997fdd975 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
@@ -3,6 +3,7 @@
 namespace Drupal\block\Plugin\migrate\process;
 
 use Drupal\Core\Block\BlockPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -10,10 +11,9 @@
 // cspell:ignore whois
 
 /**
- * @MigrateProcessPlugin(
- *   id = "block_settings"
- * )
+ * Determines the block settings.
  */
+#[MigrateProcess('block_settings')]
 class BlockSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockTheme.php b/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
index 11a35bec7f39..f225b2bfc400 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
@@ -3,6 +3,7 @@
 namespace Drupal\block\Plugin\migrate\process;
 
 use Drupal\Core\Config\Config;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -10,11 +11,7 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "block_theme"
- * )
- */
+#[MigrateProcess('block_theme')]
 class BlockTheme extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php b/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
index a5984e3b7dc6..9b6f18c8d95b 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -12,11 +13,7 @@
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "block_visibility"
- * )
- */
+#[MigrateProcess('block_visibility')]
 class BlockVisibility extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/process/RolesLookup.php b/core/modules/block/src/Plugin/migrate/process/RolesLookup.php
index 210a9c21d9ab..1b115a02d69c 100644
--- a/core/modules/block/src/Plugin/migrate/process/RolesLookup.php
+++ b/core/modules/block/src/Plugin/migrate/process/RolesLookup.php
@@ -3,6 +3,7 @@
 namespace Drupal\block\Plugin\migrate\process;
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -30,11 +31,8 @@
  * the source row.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "roles_lookup"
- * )
  */
+#[MigrateProcess('roles_lookup')]
 class RolesLookup extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/FieldType.php b/core/modules/field/src/Plugin/migrate/process/FieldType.php
index a4a0fb9d42df..979b0ea49cae 100644
--- a/core/modules/field/src/Plugin/migrate/process/FieldType.php
+++ b/core/modules/field/src/Plugin/migrate/process/FieldType.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Plugin\migrate\process\StaticMap;
@@ -11,11 +12,7 @@
 use Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "field_type"
- * )
- */
+#[MigrateProcess('field_type')]
 class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/ProcessField.php b/core/modules/field/src/Plugin/migrate/process/ProcessField.php
index a82724322874..ac86816161fa 100644
--- a/core/modules/field/src/Plugin/migrate/process/ProcessField.php
+++ b/core/modules/field/src/Plugin/migrate/process/ProcessField.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -36,11 +37,8 @@
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  * @see \Drupal\migrate_drupal\Plugin\MigrateFieldInterface;
- *
- * @MigrateProcessPlugin(
- *   id = "process_field"
- * )
  */
+#[MigrateProcess('process_field')]
 class ProcessField extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
index 1e9c82cd3a94..6398203243e4 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
 
 /**
  * Set the default field settings.
- *
- * @MigrateProcessPlugin(
- *   id = "field_formatter_settings_defaults"
- * )
  */
+#[MigrateProcess('field_formatter_settings_defaults')]
 class FieldFormatterSettingsDefaults extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
index 99526b58009a..f18fae6af736 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -9,10 +10,9 @@
 // cspell:ignore imagefield
 
 /**
- * @MigrateProcessPlugin(
- *   id = "d6_field_instance_defaults"
- * )
+ * Determines the default field settings.
  */
+#[MigrateProcess('d6_field_instance_defaults')]
 class FieldInstanceDefaults extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
index 5e8d2322f8d4..6342c027de09 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Determines the settings property and translation for boolean fields.
- *
- * @MigrateProcessPlugin(
- *   id = "d6_field_instance_option_translation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "d6_field_instance_option_translation",
+  handle_multiples: TRUE,
+)]
 class FieldInstanceOptionTranslation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
index ca5741b17709..2fcef2b58931 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -9,10 +10,9 @@
 // cspell:ignore filefield imagefield
 
 /**
- * @MigrateProcessPlugin(
- *   id = "d6_field_field_settings"
- * )
+ * Determines the field instance settings.
  */
+#[MigrateProcess('d6_field_field_settings')]
 class FieldInstanceSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
index 4f79d7d2eac1..d333a9276fd9 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -10,11 +11,8 @@
 
 /**
  * Get the field instance widget settings.
- *
- * @MigrateProcessPlugin(
- *   id = "field_instance_widget_settings"
- * )
  */
+#[MigrateProcess('field_instance_widget_settings')]
 class FieldInstanceWidgetSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
index 1976becf830e..6c6cf100fa93 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Determines the allowed values translation for select lists.
- *
- * @MigrateProcessPlugin(
- *   id = "d6_field_option_translation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "d6_field_option_translation",
+  handle_multiples: TRUE,
+)]
 class FieldOptionTranslation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
index 6e35cedabf3b..ce247d025d99 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -10,11 +11,8 @@
 
 /**
  * Get the field settings.
- *
- * @MigrateProcessPlugin(
- *   id = "field_settings"
- * )
  */
+#[MigrateProcess('field_settings')]
 class FieldSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldTypeDefaults.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldTypeDefaults.php
index 50d4e924a82c..dd9a88b64f43 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldTypeDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldTypeDefaults.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -9,11 +10,8 @@
 
 /**
  * Gives us a chance to set per field defaults.
- *
- * @MigrateProcessPlugin(
- *   id = "d6_field_type_defaults"
- * )
  */
+#[MigrateProcess('d6_field_type_defaults')]
 class FieldTypeDefaults extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldBundle.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldBundle.php
index 5b0b95019515..d5b2e30075b6 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldBundle.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldBundle.php
@@ -3,6 +3,7 @@
 namespace Drupal\field\Plugin\migrate\process\d7;
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -50,11 +51,8 @@
  *
  * @see core/modules/comment/migrations/d7_comment_type.yml
  * @see core/modules/field/migrations/d7_field_instance.yml
- *
- * * @MigrateProcessPlugin(
- *   id = "field_bundle"
- * )
  */
+#[MigrateProcess('field_bundle')]
 class FieldBundle extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
index fab63a67b504..b0e8a5a3194a 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
@@ -2,15 +2,12 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "d7_field_instance_defaults"
- * )
- */
+#[MigrateProcess('d7_field_instance_defaults')]
 class FieldInstanceDefaults extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
index a3e2063183e6..00230c8ebea1 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Determines the settings property and translation for boolean fields.
- *
- * @MigrateProcessPlugin(
- *   id = "d7_field_instance_option_translation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "d7_field_instance_option_translation",
+  handle_multiples: TRUE,
+)]
 class FieldInstanceOptionTranslation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
index 5236e5507a38..e4009914f09f 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -9,10 +10,11 @@
 // cspell:ignore entityreference
 
 /**
- * @MigrateProcessPlugin(
- *   id = "d7_field_instance_settings"
- * )
+ * Determines the field instance settings.
  */
+#[MigrateProcess(
+ id: "d7_field_instance_settings"
+)]
 class FieldInstanceSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
index 4b60335f7fb8..42a2c0ac7d97 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Determines the allowed values translation for select lists.
- *
- * @MigrateProcessPlugin(
- *   id = "d7_field_option_translation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "d7_field_option_translation",
+  handle_multiples: TRUE,
+)]
 class FieldOptionTranslation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldSettings.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldSettings.php
index a18e4fac998d..bcf0ed0e91e5 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldSettings.php
@@ -2,15 +2,12 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "d7_field_settings"
- * )
- */
+#[MigrateProcess('d7_field_settings')]
 class FieldSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldTypeDefaults.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldTypeDefaults.php
index 8a7267d2352b..3e69cf002e43 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldTypeDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldTypeDefaults.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\field\Plugin\migrate\process\d7;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
 
 /**
  * Gives us a chance to set per field defaults.
- *
- * @MigrateProcessPlugin(
- *   id = "d7_field_type_defaults"
- * )
  */
+#[MigrateProcess('d7_field_type_defaults')]
 class FieldTypeDefaults extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php b/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
index 6845b154f4eb..b91dc08e90f2 100644
--- a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
+++ b/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
@@ -5,16 +5,13 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "d6_field_file"
- * )
- */
+#[MigrateProcess('d6_field_file')]
 class FieldFile extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
index 08eb189a3901..f4d3ad45c3e7 100644
--- a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
+++ b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\file\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Process the file URL into a D8 compatible URL.
- *
- * @MigrateProcessPlugin(
- *   id = "file_uri"
- * )
  */
+#[MigrateProcess('file_uri')]
 class FileUri extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/filter/src/Plugin/migrate/process/FilterID.php b/core/modules/filter/src/Plugin/migrate/process/FilterID.php
index 27973eae1605..98d71db39c1a 100644
--- a/core/modules/filter/src/Plugin/migrate/process/FilterID.php
+++ b/core/modules/filter/src/Plugin/migrate/process/FilterID.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\filter\Plugin\FilterInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\migrate\process\StaticMap;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -19,10 +20,9 @@
 // cspell:ignore shortcode spamspan typogrify wordfilter xbbcode
 
 /**
- * @MigrateProcessPlugin(
- *   id = "filter_id"
- * )
+ * Determines the filter ID.
  */
+#[MigrateProcess('filter_id')]
 class FilterID extends StaticMap implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/filter/src/Plugin/migrate/process/FilterSettings.php b/core/modules/filter/src/Plugin/migrate/process/FilterSettings.php
index 156f29e12d5d..4fb48aa9824b 100644
--- a/core/modules/filter/src/Plugin/migrate/process/FilterSettings.php
+++ b/core/modules/filter/src/Plugin/migrate/process/FilterSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\filter\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -10,12 +11,11 @@
  * Adds the default allowed attributes to filter_html's allowed_html setting.
  *
  * E.g. map '<a>' to '<a href hreflang dir>'.
- *
- * @MigrateProcessPlugin(
- *   id = "filter_settings",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "filter_settings",
+  handle_multiples: TRUE,
+)]
 class FilterSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php b/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
index d05ce6792b55..f907c2e3f400 100644
--- a/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
+++ b/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
@@ -3,6 +3,7 @@
 namespace Drupal\filter\Plugin\migrate\process\d6;
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -33,12 +34,11 @@
  *  filter formats for a role.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "filter_format_permission",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "filter_format_permission",
+  handle_multiples: TRUE,
+)]
 class FilterFormatPermission extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/forum/src/Plugin/migrate/process/ForumVocabulary.php b/core/modules/forum/src/Plugin/migrate/process/ForumVocabulary.php
index 44fad9a9a58e..e97c73f86655 100644
--- a/core/modules/forum/src/Plugin/migrate/process/ForumVocabulary.php
+++ b/core/modules/forum/src/Plugin/migrate/process/ForumVocabulary.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\forum\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -26,11 +27,8 @@
  *     plugin: forum_vocabulary
  *     machine_name: taxonomy_forums
  * @endcode
- *
- * @MigrateProcessPlugin(
- *   id = "forum_vocabulary"
- * )
  */
+#[MigrateProcess('forum_vocabulary')]
 class ForumVocabulary extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php b/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
index add75c064adc..9fbbb338173d 100644
--- a/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
+++ b/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\image\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -9,10 +10,9 @@
 // cspell:ignore imagecache
 
 /**
- * @MigrateProcessPlugin(
- *   id = "d6_imagecache_actions"
- * )
+ * Defines the image cache actions migrate process plugin.
  */
+#[MigrateProcess('d6_imagecache_actions')]
 class ImageCacheActions extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php b/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
index 513b93343f90..94faae1a061f 100644
--- a/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
+++ b/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\language\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -14,11 +15,8 @@
  * - The language content type, e.g. '1'
  * - The entity_translation_entity_types, an array of entity types.
  * - An entity type used with entity translation, e.g. comment.
- *
- * @MigrateProcessPlugin(
- *   id = "content_translation_enabled_setting"
- * )
  */
+#[MigrateProcess('content_translation_enabled_setting')]
 class ContentTranslationEnabledSetting extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/language/src/Plugin/migrate/process/LanguageDomains.php b/core/modules/language/src/Plugin/migrate/process/LanguageDomains.php
index 6a3b89e88869..dd9b32eb12cf 100644
--- a/core/modules/language/src/Plugin/migrate/process/LanguageDomains.php
+++ b/core/modules/language/src/Plugin/migrate/process/LanguageDomains.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\language\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\migrate\process\ArrayBuild;
 use Drupal\migrate\Row;
 
 /**
  * This plugin makes sure that no domain is empty if domain negotiation is used.
- *
- * @MigrateProcessPlugin(
- *   id = "language_domains",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "language_domains",
+  handle_multiples: TRUE,
+)]
 class LanguageDomains extends ArrayBuild {
 
   /**
diff --git a/core/modules/language/src/Plugin/migrate/process/LanguageNegotiation.php b/core/modules/language/src/Plugin/migrate/process/LanguageNegotiation.php
index ad8af296ca4d..affcd8a27095 100644
--- a/core/modules/language/src/Plugin/migrate/process/LanguageNegotiation.php
+++ b/core/modules/language/src/Plugin/migrate/process/LanguageNegotiation.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\language\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -9,12 +10,11 @@
 
 /**
  * Processes the arrays for the language types' negotiation methods and weights.
- *
- * @MigrateProcessPlugin(
- *   id = "language_negotiation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "language_negotiation",
+  handle_multiples: TRUE,
+)]
 class LanguageNegotiation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/language/src/Plugin/migrate/process/LanguageTypes.php b/core/modules/language/src/Plugin/migrate/process/LanguageTypes.php
index bc09dd77d001..6e7a7dd90aaf 100644
--- a/core/modules/language/src/Plugin/migrate/process/LanguageTypes.php
+++ b/core/modules/language/src/Plugin/migrate/process/LanguageTypes.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\language\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -9,12 +10,11 @@
 
 /**
  * Processes the array for the language types.
- *
- * @MigrateProcessPlugin(
- *   id = "language_types",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "language_types",
+  handle_multiples: TRUE,
+)]
 class LanguageTypes extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/link/src/Plugin/migrate/process/FieldLink.php b/core/modules/link/src/Plugin/migrate/process/FieldLink.php
index 0bea5203a9ae..e8dd8f13dfd9 100644
--- a/core/modules/link/src/Plugin/migrate/process/FieldLink.php
+++ b/core/modules/link/src/Plugin/migrate/process/FieldLink.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\link\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -32,11 +33,8 @@
  *     uri_scheme: 'https://'
  *     source: field_link
  * @endcode
- *
- * @MigrateProcessPlugin(
- *   id = "field_link"
- * )
  */
+#[MigrateProcess('field_link')]
 class FieldLink extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php
index af3e0998a994..0eb2a6071033 100644
--- a/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php
+++ b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\menu_link_content\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -19,12 +20,11 @@
  * @endcode
  *
  * This will convert the query options of the link.
- *
- * @MigrateProcessPlugin(
- *   id = "link_options",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "link_options",
+  handle_multiples: TRUE,
+)]
 class LinkOptions extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php
index fad8897511d2..c67e04010d91 100644
--- a/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php
+++ b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Url;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -38,11 +39,8 @@
  * without validating if the resulting URI is valid. For example, if the
  * 'link_path' property is 'node/12', the uri property value of link will be
  * 'entity:node/12'.
- *
- * @MigrateProcessPlugin(
- *   id = "link_uri"
- * )
  */
+#[MigrateProcess('link_uri')]
 class LinkUri extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/ArrayBuild.php b/core/modules/migrate/src/Plugin/migrate/process/ArrayBuild.php
index acb83662fba6..d560ae102ce2 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/ArrayBuild.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/ArrayBuild.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -68,12 +69,11 @@
  * @endcode
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "array_build",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "array_build",
+  handle_multiples: TRUE,
+)]
 class ArrayBuild extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Callback.php b/core/modules/migrate/src/Plugin/migrate/process/Callback.php
index ad65bc3bedc9..39a4fb50b319 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Callback.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Callback.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -72,11 +73,8 @@
  * This will remove the trailing '/', if any, from a URL.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "callback"
- * )
  */
+#[MigrateProcess('callback')]
 class Callback extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Concat.php b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
index 801d65d6c469..bf38a88abced 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Concat.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -50,12 +51,11 @@
  * property is "Rosa", new_text_field will be "Rosa/Parks".
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "concat",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "concat",
+  handle_multiples: TRUE,
+)]
 class Concat extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
index 05229f03d1b7..8551229fb28b 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -40,12 +41,11 @@
  * not found, set the destination property uid to 44.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "default_value",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "default_value",
+  handle_multiples: TRUE,
+)]
 class DefaultValue extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Download.php b/core/modules/migrate/src/Plugin/migrate/process/Download.php
index 77a2b9bae5f8..01df1cdd8d9d 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Download.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Download.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\MigrateException;
@@ -57,11 +58,8 @@
  * destination URI is unique. If a file with the same name exists at the
  * destination, a numbered suffix like '_0' will be appended to make it unique.
  * The destination URI is saved in a file entity.
- *
- * @MigrateProcessPlugin(
- *   id = "download"
- * )
  */
+#[MigrateProcess('download')]
 class Download extends FileProcessBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/EntityExists.php b/core/modules/migrate/src/Plugin/migrate/process/EntityExists.php
index 72f2ec39afe4..117ebf26a316 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/EntityExists.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/EntityExists.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
@@ -21,11 +22,8 @@
  *     source: tid
  *     entity_type: taxonomy_term
  * @endcode
- *
- * @MigrateProcessPlugin(
- *  id = "entity_exists"
- * )
- */
+*/
+#[MigrateProcess('entity_exists')]
 class EntityExists extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Extract.php b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
index 4af44f40fd24..5001b5a1faef 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Extract.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\Variable;
 use Drupal\migrate\ProcessPluginBase;
@@ -56,12 +57,11 @@
  * return "Default title".
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "extract",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "extract",
+  handle_multiples: TRUE,
+)]
 class Extract extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php b/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
index f7701ea27c5b..db2731502392 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\Core\File\Exception\FileException;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
@@ -46,11 +47,8 @@
  * @endcode
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "file_copy"
- * )
  */
+#[MigrateProcess('file_copy')]
 class FileCopy extends FileProcessBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Flatten.php b/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
index 2461b3978596..a7f741f17d98 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -36,12 +37,11 @@
  * a three items array [bar, alpha, beta], suitable for import.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "flatten",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "flatten",
+  handle_multiples: TRUE,
+)]
 class Flatten extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
index 4cb76c801e43..644689214de6 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\Component\Datetime\DateTimePlus;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -85,11 +86,8 @@
  * @see \Drupal\Component\Datetime\DateTimePlus::__construct()
  * @see \Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "format_date"
- * )
  */
+#[MigrateProcess('format_date')]
 class FormatDate extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Get.php b/core/modules/migrate/src/Plugin/migrate/process/Get.php
index b2775b3e2d93..dcc8f04aaede 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Get.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Get.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -86,12 +87,11 @@
  * This should occur extremely rarely.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "get",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "get",
+  handle_multiples: TRUE,
+)]
 class Get extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Log.php b/core/modules/migrate/src/Plugin/migrate/process/Log.php
index 9ee65693bcb2..3470aa1118ef 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Log.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Log.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -20,11 +21,8 @@
  * @endcode
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "log"
- * )
  */
+#[MigrateProcess('log')]
 class Log extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
index bd3fb33b7279..a955d7adf2a4 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
@@ -5,6 +5,7 @@
 use Drupal\Component\Transliteration\TransliterationInterface;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateException;
@@ -57,11 +58,8 @@
  * is 'áéí!.jpg' then the destination value of bar will be 'aei_.jpg'.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "machine_name"
- * )
  */
+#[MigrateProcess('machine_name')]
 class MachineName extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueEntityField.php b/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueEntityField.php
index 4b86fd32a45f..77e0ade9102c 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueEntityField.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueEntityField.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -76,11 +77,8 @@
  *
  * @see \Drupal\migrate\Plugin\migrate\process\MakeUniqueBase
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "make_unique_entity_field"
- * )
  */
+#[MigrateProcess('make_unique_entity_field')]
 class MakeUniqueEntityField extends MakeUniqueBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MenuLinkParent.php b/core/modules/migrate/src/Plugin/migrate/process/MenuLinkParent.php
index d59b81d59603..fb8b73b7fa0b 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MenuLinkParent.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MenuLinkParent.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Menu\MenuLinkManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Url;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\MigrateSkipRowException;
@@ -53,11 +54,8 @@
  *
  * @see https://www.drupal.org/docs/8/api/menu-api
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "menu_link_parent"
- * )
  */
+#[MigrateProcess('menu_link_parent')]
 class MenuLinkParent extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
index 194057dbf4c6..d70734482698 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateLookupInterface;
 use Drupal\migrate\MigrateSkipRowException;
@@ -120,11 +121,8 @@
  * @see https://www.drupal.org/project/drupal/issues/3246666
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "migration_lookup"
- * )
  */
+#[MigrateProcess('migration_lookup')]
 class MigrationLookup extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/NullCoalesce.php b/core/modules/migrate/src/Plugin/migrate/process/NullCoalesce.php
index ad08ec7f759f..2bd6833376dd 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/NullCoalesce.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/NullCoalesce.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -29,11 +30,8 @@
  *     - baz
  * @endcode
  * This plugin will return the equivalent of `foo ?? bar ?? baz`
- *
- * @MigrateProcessPlugin(
- *   id = "null_coalesce"
- * )
  */
+#[MigrateProcess('null_coalesce')]
 class NullCoalesce extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Route.php b/core/modules/migrate/src/Plugin/migrate/process/Route.php
index 90f5d96ef5ea..db2efa577445 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Route.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Route.php
@@ -5,6 +5,7 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Path\PathValidatorInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -50,11 +51,8 @@
  * (user/login) with a query string of "destination=node/1".
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "route"
- * )
  */
+#[MigrateProcess('route')]
 class Route extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
@@ -88,6 +86,7 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_definition,
       $migration,
       $container->get('path.validator')
+
     );
   }
 
diff --git a/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php b/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
index cc258bc6da0d..2449b7c39077 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -73,11 +74,8 @@
  * source.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "skip_on_empty"
- * )
  */
+#[MigrateProcess('skip_on_empty')]
 class SkipOnEmpty extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/SkipRowIfNotSet.php b/core/modules/migrate/src/Plugin/migrate/process/SkipRowIfNotSet.php
index fa9b3f618070..a70aefd3791c 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SkipRowIfNotSet.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SkipRowIfNotSet.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -36,12 +37,11 @@
  * message table.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "skip_row_if_not_set",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "skip_row_if_not_set",
+  handle_multiples: TRUE,
+)]
 class SkipRowIfNotSet extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php b/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
index 0d0c523425f7..6b9eda479427 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\Variable;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
@@ -140,11 +141,8 @@
  *
  * @see https://www.drupal.org/project/drupal/issues/2827897
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "static_map"
- * )
  */
+#[MigrateProcess('static_map')]
 class StaticMap extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/SubProcess.php b/core/modules/migrate/src/Plugin/migrate/process/SubProcess.php
index f9fd876f6ef1..120e57758181 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SubProcess.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SubProcess.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateSkipRowException;
 use Drupal\migrate\ProcessPluginBase;
@@ -166,12 +167,11 @@
  * @see \Drupal\migrate\Plugin\migrate\process\MigrationLookup
  * @see \Drupal\migrate\Plugin\migrate\process\StaticMap
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "sub_process",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "sub_process",
+  handle_multiples: TRUE,
+)]
 class SubProcess extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Substr.php b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
index 45835f153cde..352ae778a51b 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Substr.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
@@ -60,11 +61,8 @@
  * @endcode
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "substr"
- * )
  */
+#[MigrateProcess('substr')]
 class Substr extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/UrlEncode.php b/core/modules/migrate/src/Plugin/migrate/process/UrlEncode.php
index be7b2e150eb7..e216ebea70b1 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/UrlEncode.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/UrlEncode.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\ProcessPluginBase;
@@ -24,11 +25,8 @@
  * into 'http://example.com/a%20url%20with%20spaces.html'.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "urlencode"
- * )
  */
+#[MigrateProcess('urlencode')]
 class UrlEncode extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate/tests/modules/migrate_prepare_row_test/src/Plugin/migrate/process/TestSkipRowProcess.php b/core/modules/migrate/tests/modules/migrate_prepare_row_test/src/Plugin/migrate/process/TestSkipRowProcess.php
index b1540888ac1f..3df233bc5c10 100644
--- a/core/modules/migrate/tests/modules/migrate_prepare_row_test/src/Plugin/migrate/process/TestSkipRowProcess.php
+++ b/core/modules/migrate/tests/modules/migrate_prepare_row_test/src/Plugin/migrate/process/TestSkipRowProcess.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate_prepare_row_test\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\MigrateSkipRowException;
 use Drupal\migrate\ProcessPluginBase;
@@ -9,11 +10,8 @@
 
 /**
  * Provides a testing process plugin that skips rows.
- *
- * @MigrateProcessPlugin(
- *   id = "test_skip_row_process"
- * )
  */
+#[MigrateProcess('test_skip_row_process')]
 class TestSkipRowProcess extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeLookup.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeLookup.php
index 2c2defce0333..88fd9d880ae1 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeLookup.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeLookup.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -17,11 +18,8 @@
  * returned. This keeps the behavior the same as the classic node migration.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "node_complete_node_lookup"
- * )
  */
+#[MigrateProcess('node_complete_node_lookup')]
 class NodeCompleteNodeLookup extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeRevisionLookup.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeRevisionLookup.php
index f1bc5a9d3cc5..af85cb59e325 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeRevisionLookup.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeRevisionLookup.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -17,11 +18,8 @@
  * returned. This keeps the behavior the same as the classic node migration.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "node_complete_node_revision_lookup"
- * )
  */
+#[MigrateProcess('node_complete_node_revision_lookup')]
 class NodeCompleteNodeRevisionLookup extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeTranslationLookup.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeTranslationLookup.php
index 36b193eb28e8..9cdec6d1c4e1 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeTranslationLookup.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/NodeCompleteNodeTranslationLookup.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -18,11 +19,8 @@
  * migration.
  *
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- *
- * @MigrateProcessPlugin(
- *   id = "node_complete_node_translation_lookup"
- * )
  */
+#[MigrateProcess('node_complete_node_translation_lookup')]
 class NodeCompleteNodeTranslationLookup extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/node/src/Plugin/migrate/process/d6/NodeUpdate7008.php b/core/modules/node/src/Plugin/migrate/process/d6/NodeUpdate7008.php
index f6da2eb5dccd..a98659d78197 100644
--- a/core/modules/node/src/Plugin/migrate/process/d6/NodeUpdate7008.php
+++ b/core/modules/node/src/Plugin/migrate/process/d6/NodeUpdate7008.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\node\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Split the 'administer nodes' permission from 'access content overview'.
- *
- * @MigrateProcessPlugin(
- *   id = "node_update_7008"
- * )
  */
+#[MigrateProcess('node_update_7008')]
 class NodeUpdate7008 extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php b/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
index b982d2b34820..18015df0315e 100644
--- a/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
+++ b/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\path\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -49,11 +50,8 @@
  * In the example above, if the node_translation lookup succeeds and the
  * original path is of the format '/node/<original node nid>', then the new path
  * will be set to '/node/<translated node nid>'
- *
- * @MigrateProcessPlugin(
- *   id = "path_set_translated"
- * )
  */
+#[MigrateProcess('path_set_translated')]
 class PathSetTranslated extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php b/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
index 30f40bae9889..4c037897a571 100644
--- a/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
+++ b/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\responsive_image\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -9,11 +10,8 @@
 
 /**
  * Transforms image style mappings.
- *
- * @MigrateProcessPlugin(
- *   id = "image_style_mappings"
- * )
  */
+#[MigrateProcess('image_style_mappings')]
 class ImageStyleMappings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/search/src/Plugin/migrate/process/SearchConfigurationRankings.php b/core/modules/search/src/Plugin/migrate/process/SearchConfigurationRankings.php
index f35bdfe7bcd9..7b54a75ac5ee 100644
--- a/core/modules/search/src/Plugin/migrate/process/SearchConfigurationRankings.php
+++ b/core/modules/search/src/Plugin/migrate/process/SearchConfigurationRankings.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\search\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
 
 /**
  * Generate configuration rankings.
- *
- * @MigrateProcessPlugin(
- *   id = "search_configuration_rankings"
- * )
  */
+#[MigrateProcess('search_configuration_rankings')]
 class SearchConfigurationRankings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/system/src/Plugin/migrate/process/d6/SystemUpdate7000.php b/core/modules/system/src/Plugin/migrate/process/d6/SystemUpdate7000.php
index 7bb64c023bcc..ee1550984f77 100644
--- a/core/modules/system/src/Plugin/migrate/process/d6/SystemUpdate7000.php
+++ b/core/modules/system/src/Plugin/migrate/process/d6/SystemUpdate7000.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\system\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Rename blog and forum permissions to be consistent with other content types.
- *
- * @MigrateProcessPlugin(
- *   id = "system_update_7000"
- * )
  */
+#[MigrateProcess('system_update_7000')]
 class SystemUpdate7000 extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/system/src/Plugin/migrate/process/d6/TimeZone.php b/core/modules/system/src/Plugin/migrate/process/d6/TimeZone.php
index 7d11beea1941..08c0658bd725 100644
--- a/core/modules/system/src/Plugin/migrate/process/d6/TimeZone.php
+++ b/core/modules/system/src/Plugin/migrate/process/d6/TimeZone.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\system\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Process the D6 Timezone offset into a D8 compatible timezone name.
- *
- * @MigrateProcessPlugin(
- *   id = "timezone"
- * )
  */
+#[MigrateProcess('timezone')]
 class TimeZone extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/taxonomy/src/Plugin/migrate/process/TargetBundle.php b/core/modules/taxonomy/src/Plugin/migrate/process/TargetBundle.php
index 5741908c876a..1f6196320303 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/process/TargetBundle.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/process/TargetBundle.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\taxonomy\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Converts a Drupal 6 vocabulary ID to a target bundle array.
- *
- * @MigrateProcessPlugin(
- *   id = "target_bundle"
- * )
  */
+#[MigrateProcess('target_bundle')]
 class TargetBundle extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/ConvertTokens.php b/core/modules/user/src/Plugin/migrate/process/ConvertTokens.php
index ed95db271570..cc3813438066 100644
--- a/core/modules/user/src/Plugin/migrate/process/ConvertTokens.php
+++ b/core/modules/user/src/Plugin/migrate/process/ConvertTokens.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\user\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
@@ -9,12 +10,11 @@
 
 /**
  * Plugin to replace !tokens with [tokens].
- *
- * @MigrateProcessPlugin(
- *   id = "convert_tokens",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "convert_tokens",
+  handle_multiples: TRUE,
+)]
 class ConvertTokens extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/ProfileFieldSettings.php b/core/modules/user/src/Plugin/migrate/process/ProfileFieldSettings.php
index 6e16c59d5b27..f25b5170d633 100644
--- a/core/modules/user/src/Plugin/migrate/process/ProfileFieldSettings.php
+++ b/core/modules/user/src/Plugin/migrate/process/ProfileFieldSettings.php
@@ -2,15 +2,12 @@
 
 namespace Drupal\user\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
-/**
- * @MigrateProcessPlugin(
- *   id = "profile_field_settings"
- * )
- */
+#[MigrateProcess('profile_field_settings')]
 class ProfileFieldSettings extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/UserLangcode.php b/core/modules/user/src/Plugin/migrate/process/UserLangcode.php
index 174c8a557c18..7a2f90753958 100644
--- a/core/modules/user/src/Plugin/migrate/process/UserLangcode.php
+++ b/core/modules/user/src/Plugin/migrate/process/UserLangcode.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -11,11 +12,8 @@
 
 /**
  * Provides a process plugin for the user langcode.
- *
- * @MigrateProcessPlugin(
- *   id = "user_langcode"
- * )
  */
+#[MigrateProcess('user_langcode')]
 class UserLangcode extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php b/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
index 9ba582d46b4b..3c1d307a2fd9 100644
--- a/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
+++ b/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
@@ -2,17 +2,15 @@
 
 namespace Drupal\user\Plugin\migrate\process;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Keep the predefined roles for rid 1 and 2.
- *
- * @MigrateProcessPlugin(
- *   id = "user_update_8002"
- * )
  */
+#[MigrateProcess('user_update_8002')]
 class UserUpdate8002 extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php b/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
index 4f78e193f020..fd7aea36bce7 100644
--- a/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
+++ b/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
@@ -2,18 +2,18 @@
 
 namespace Drupal\user\Plugin\migrate\process\d6;
 
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 
 /**
  * Determines the settings property and translation.
- *
- * @MigrateProcessPlugin(
- *   id = "d6_profile_field_option_translation",
- *   handle_multiples = TRUE
- * )
  */
+#[MigrateProcess(
+  id: "d6_profile_field_option_translation",
+  handle_multiples: TRUE,
+)]
 class ProfileFieldOptionTranslation extends ProcessPluginBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/process/d6/UserUpdate7002.php b/core/modules/user/src/Plugin/migrate/process/d6/UserUpdate7002.php
index 84f6dfecc221..91747173771a 100644
--- a/core/modules/user/src/Plugin/migrate/process/d6/UserUpdate7002.php
+++ b/core/modules/user/src/Plugin/migrate/process/d6/UserUpdate7002.php
@@ -3,6 +3,7 @@
 namespace Drupal\user\Plugin\migrate\process\d6;
 
 use Drupal\Core\Datetime\TimeZoneFormHelper;
+use Drupal\migrate\Attribute\MigrateProcess;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -12,11 +13,8 @@
 
 /**
  * Converts user time zones from time zone offsets to time zone names.
- *
- * @MigrateProcessPlugin(
- *   id = "user_update_7002"
- * )
  */
+#[MigrateProcess('user_update_7002')]
 class UserUpdate7002 extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
-- 
GitLab