diff --git a/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php b/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
index 41524821b68edea4d323f5004751e766a506021f..33bcfef2fccf44d41b3f4d98fdc64e2bacc86baa 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 cd79f051bcbe4eea948e35f001382602106c3794..f60471ca7027840b2337fa78caef135f997f50f7 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 09c30b1f2cbe23686bed376a310b8a613514f279..e88997fdd9752a420003c654ce8f6606d1d14951 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 11a35bec7f39f5730c0e2e0e13ffed6cbd450958..f225b2bfc4008d9d63b1ce2f034908841fbb106b 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 a5984e3b7dc6c7862a7a5fb4bab9cc0946eb3daa..9b6f18c8d95bc7cb23b077aed9c9a4029b4e48c5 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 210a9c21d9ab66b3ee5f8b52d8ee1cabc7186dcc..1b115a02d69c6420839fe8e11a6386ddff821039 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 a4a0fb9d42df3eccda2208523e0017b1106c8c3e..979b0ea49cae0e57da41c1cfa1e68fbc1afe195f 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 a82724322874752857823b01734d06f34a60cfec..ac86816161fae2afa254dbd7f986fde6c0bf50b1 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 1e9c82cd3a94c0f9c74a45ee8d3e25559ccd6f8e..6398203243e4e83ac51b1d30909b701a1f66ffcb 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 99526b58009a25d1a42827ab6514770327ed3dcc..f18fae6af736db30e7c17bc86f319a8a046f7e9a 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 5e8d2322f8d45743c90d2e872d153ce28a3a8562..6342c027de09f03cad039d6949b55d78f329595c 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 ca5741b177090904fea66d4ebe47d2bcfce515cd..2fcef2b5893194e26de6b2c5a6b4e5fd2db44140 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 4f79d7d2eac1fd24727326a44de802744fc8fb7a..d333a9276fd90714fd5a70074693b09b79aef0f5 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 1976becf830ede911140e808081a473bc2e822cc..6c6cf100fa9307c5232540d46aa99d6db46fca92 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 6e35cedabf3b4f62a93ad6d987b1cbf5ddffdcc3..ce247d025d993036cc99833f6a3815b6333bf4cc 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 50d4e924a82ce0e826ce8c49bc4099cdc0748e7e..dd9a88b64f43a6f3e53ada4195683e13199a9d72 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 5b0b95019515b01d3ed7aac477c432388b517bcb..d5b2e30075b68a4fe65f5cf561ea34c6b28a6605 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 fab63a67b50472751ade3cb368a989d91dfca7cb..b0e8a5a3194a743774c3a6fe20d660a66feae76a 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 a3e2063183e6adf8abc2b911d89256c4055ff864..00230c8ebea125c64204f82c0b59d8991f6f2217 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 5236e5507a38643b88fda15aa70b15b4549bb320..e4009914f09f74609406c4cc8431a85d2817b5b7 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 4b60335f7fb895684b8fa893afde8f7cd2142f56..42a2c0ac7d973c9acde7d7b6fae286f525fe1fdf 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 a18e4fac998d69a28827dca0eaf59f54c3838aff..bcf0ed0e91e57f6043de37cf9a0514ab4e1b7896 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 8a7267d2352bbdab61ccfbdb71febc37027caf12..3e69cf002e432776acb578bb906de9564f61015e 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 6845b154f4eb59e1d0e057dbfd2e5627f3b2dc37..b91dc08e90f2b480daa53b64e71f27c735fc787e 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 08eb189a390147b35feb59c493b00bab7972bc10..f4d3ad45c3e72ef586d99ae2016eaecf36d63244 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 27973eae16050cf7d0a60e92cf9915e8f90ed0ae..98d71db39c1a361bd5f0bdbdb12bde902b497c45 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 156f29e12d5d0a1acf1b3544a3721361bb2277d0..4fb48aa9824bccbad31eaa1f7600d9accf3a34a5 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 d05ce6792b558ac6b21c95e615e055e132bc7a7c..f907c2e3f400df06c1a46bb9fabbfc75bf254396 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 44fad9a9a58e657b1c4d675efd3458140131d6aa..e97c73f866556bdd3277e322de6dfde53e1e46d0 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 add75c064adccff52c60ae7239ada8d12fbfe83c..9fbbb338173db6b82d607497bef124d5c9523cd1 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 513b93343f90386eaf59b2447eea81b6ebbe87e0..94faae1a061f6c774413d36466b9a7072f96d4a2 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 6a3b89e8886985b0f5411fa366f984a247c32207..dd9b32eb12cfe835a53ffd27e412862826e20701 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 ad8af296ca4d8e6973583e2c8b162f1c8e48c4f2..affcd8a27095e8d7811b21183db56224f237145d 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 bc09dd77d001098c58bf9f31e7f585be27d2e4ea..6e7a7dd90aaf3a6895d0cef51c3a35aaf6625787 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 0bea5203a9aef09b27d3e0e488642d3a0f292eae..e8dd8f13dfd9c11bea4a228a790a85dd6d1b0b53 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 af3e0998a9943c4de5111731f0e9cee1d3be212c..0eb2a6071033f68215094d2f3730bf77d0322b7c 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 fad8897511d27d2bf91a75265fd4d66dde3ac04d..c67e04010d913c02be8e9aa0f289168f68c9f515 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 acb83662fba66940f7fc9db8cea5ae403ff9709d..d560ae102ce249b27cd43fa3884ad3d12b29b95e 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 ad65bc3bedc9a167a944792256cca73d0ffff3fc..39a4fb50b3193b48922bd749bb844b807d5fa08a 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 801d65d6c4697c844e8b63e14f9bbb532f89b3f9..bf38a88abcedda2b4b77b820ad0a120d438b4cd4 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 05229f03d1b75800a8987c38b431d238251eae57..8551229fb28b5f4175b5dd3a7c8cf4f7ae38c5d7 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 77a2b9bae5f85f0bf0ee476c5820bbcb652d4cfc..01df1cdd8d9d85ba15875a852b52b22597187b00 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 72f2ec39afe4136a7a1a2cc8817b1a78cb268ff6..117ebf26a3160fce85420fa3a133966f324b059f 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 4af44f40fd24bd44f2d73d852506d3914f616072..5001b5a1faef77383d5f1693f52ec76b23fdd67e 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 f7701ea27c5be5142f7835c5e7e59b1a44ff92e2..db27315023926195c304df984433e681f839961c 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 2461b3978596d8409f4995e224cad202dafca06d..a7f741f17d98f9f6eb252c386237bd8454be98a6 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 4cb76c801e431adad2cdecd7e562a330a2f0d801..644689214de651d172a3bd33541a34560cdc544d 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 b2775b3e2d9307237557c4d550533969a2ef2151..dcc8f04aaedec7e92e24eec8fc899e0d6040a378 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 9ee65693bcb22da07d111fd2714e588af93bdd10..3470aa1118efb5508929c3502666f89bfc9ba9c8 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 bd3fb33b7279aaf88a36ad32e40f446dd63d0467..a955d7adf2a47f240354d99c959feb000aa26a82 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 4b86fd32a45f586605b1297cada4a5284ecd17cf..77e0ade9102c2eb84463eb28a8d69d40f06666d8 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 d59b81d59603de11192b62177f5001e371aaf75c..fb8b73b7fa0bd77fef736e3f70a4484f38747441 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 194057dbf4c68d18a2bddc476ffd0074a9a2347c..d707344826986ca11f3acb71436310000e854852 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 ad08ec7f759f9fbb9aa2c4bbb0c862940b1704bc..2bd6833376ddbf8d9e100f69037ec33a49cc4b64 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 90f5d96ef5ea7d25239aac34466d281a559c1fdf..db2efa5774453c083ce17fb3a7af39842b202688 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 cc258bc6da0d55f4ef8b67040a49ddca41a08a77..2449b7c39077a2186bc6ae22226ac022aa62da4c 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 fa9b3f618070c80987aac29b2f11dc68eb38cd64..a70aefd3791ccad049f73d76cb0140db3f09eae2 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 0d0c523425f776d3f2376879e45c056fbf4e7d07..6b9eda4794278a07e834cdc39fb07f6eff57077f 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 f9fd876f6ef100e3fbdc468050baab8747cd6b01..120e57758181c781e0c0607e1289d05ea2ae9c9d 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 45835f153cde497202b9dd1cc21663cb4f23eeb5..352ae778a51b185da57c668e1cbef33670d8c7a0 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 be7b2e150eb76f4b1977c08e4224d0d0c8a05de6..e216ebea70b1bbd2c0011f5e6a8c02991da58f83 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 b1540888ac1fb7debd165fe1597e20cab5c6b484..3df233bc5c107d56192171a8b9162c4352fef1cb 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 2c2defce0333fc971a0337a570c0749918c0c9b8..88fd9d880ae1ed82aa0dbd50c6d3587ad8be8a9e 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 f1bc5a9d3cc52fced30d50fbd69c4432453bf83f..af85cb59e3258a3e1eae0cb6fe92d96d1e3ec421 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 36b193eb28e8c9f9558d575b99e558d1162ebd67..9cdec6d1c4e142758de167bf0ef9f3e851f72299 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 f6da2eb5dccd1a11df3a5ce8839ac609968ec9a4..a98659d78197a3721897d83dba1498ecdd9d0c1d 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 b982d2b34820ea58f308f6ed65e196ce27b57609..18015df0315e0633dfed7c7e02048d9a7f846a9e 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 30f40bae9889dfbed9356638d346d03810c8b60c..4c037897a57171685e42925a520819888a05ecd1 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 f35bdfe7bcd92af701854ffeccf6aa16b3c6c1f2..7b54a75ac5eec5c0f00335a75d61ae4c1f688dd0 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 7bb64c023bcc902326ce5824557203e45c4b7321..ee1550984f77eab4d0a006a23e86c3bac0c751bd 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 7d11beea1941bdf022fffc70d6949258413785fe..08c0658bd7251cb788cd9454d41e31349b987556 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 5741908c876ae52b5384c55ba5eba5ea89fef25d..1f61963203033d9f51995f01552486802f94c0e6 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 ed95db271570f299976541297186aeb42fde886e..cc381343806601eddf71482a01908999b4e25098 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 6e16c59d5b272df4e89b604d80c0b2beee4de531..f25b5170d633dbe46fbdd4d054ef08a498858af2 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 174c8a557c18dfc5cf89d6ff72f2246b572e33ce..7a2f90753958bfd1250d844f54e3c4f681fbc6a4 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 9ba582d46b4b4206d76e1e5b644972aa50c41eaa..3c1d307a2fd985b5dde6858918d28eb31c8f3566 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 4f78e193f020ebe3231b3872126ca973d6705840..fd7aea36bce7b23c3fe993540f6aefc2544a74b0 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 84f6dfecc22198db2aaa127c93ce50ec317d0526..91747173771a76f55e22ef7e63238ae39f886eec 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 {
 
   /**