diff --git a/core/modules/ban/src/Plugin/migrate/destination/BlockedIp.php b/core/modules/ban/src/Plugin/migrate/destination/BlockedIp.php
index b0c0e482daef8018f918312002b4cd1d8dcb0627..70f9f2cc7da74bebdd1e6ef8b7160fc52e516be6 100644
--- a/core/modules/ban/src/Plugin/migrate/destination/BlockedIp.php
+++ b/core/modules/ban/src/Plugin/migrate/destination/BlockedIp.php
@@ -4,6 +4,7 @@
 
 use Drupal\ban\BanIpManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
 use Drupal\migrate\Row;
@@ -11,11 +12,8 @@
 
 /**
  * Destination for blocked IP addresses.
- *
- * @MigrateDestination(
- *   id = "blocked_ip"
- * )
  */
+#[MigrateDestination('blocked_ip')]
 class BlockedIp extends DestinationBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php b/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php
index 33ebcdda0d9558924ca8a620c1fd1e65f83fb895..7fd997c6f541769e5f8edcb88c56ecb7924ac0d4 100644
--- a/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php
+++ b/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php
@@ -3,15 +3,15 @@
 namespace Drupal\block\Plugin\migrate\destination;
 
 use Drupal\Core\Config\Schema\SchemaIncompleteException;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Row;
 
 /**
- * @MigrateDestination(
- *   id = "entity:block"
- * )
+ * Migrate destination for block entity.
  */
+#[MigrateDestination('entity:block')]
 class EntityBlock extends EntityConfigBase {
 
   /**
diff --git a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
index 2c8fd56b2f59b7d4c0409d555952a1d00c1853bd..3b04631fd89f6494a5a01f769998499f1094b756 100644
--- a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
+++ b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
@@ -7,16 +7,16 @@
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Drupal\Core\Session\AccountSwitcherInterface;
 use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * @MigrateDestination(
- *   id = "entity:comment"
- * )
+ * Comment entity destination.
  */
+#[MigrateDestination('entity:comment')]
 class EntityComment extends EntityContentBase {
 
   /**
diff --git a/core/modules/comment/src/Plugin/migrate/destination/EntityCommentType.php b/core/modules/comment/src/Plugin/migrate/destination/EntityCommentType.php
index 9bee87a3a1dca959a2322aacdd6d2308b0dc2d09..231bab0838a4d8cca37e546b6db7c67e6a8e23e1 100644
--- a/core/modules/comment/src/Plugin/migrate/destination/EntityCommentType.php
+++ b/core/modules/comment/src/Plugin/migrate/destination/EntityCommentType.php
@@ -2,14 +2,14 @@
 
 namespace Drupal\comment\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Row;
 
 /**
- * @MigrateDestination(
- *   id = "entity:comment_type"
- * )
+ * Comment type destination.
  */
+#[MigrateDestination('entity:comment_type')]
 class EntityCommentType extends EntityConfigBase {
 
   /**
diff --git a/core/modules/image/src/Plugin/migrate/destination/EntityImageStyle.php b/core/modules/image/src/Plugin/migrate/destination/EntityImageStyle.php
index 84a390e4c053e40f3ad8c8b0d6c4bcde839c954a..f1922ffac18e8154063d6f722d91e2f02d3769de 100644
--- a/core/modules/image/src/Plugin/migrate/destination/EntityImageStyle.php
+++ b/core/modules/image/src/Plugin/migrate/destination/EntityImageStyle.php
@@ -3,6 +3,7 @@
 namespace Drupal\image\Plugin\migrate\destination;
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Row;
@@ -12,11 +13,8 @@
  *
  * Every migration that uses this destination must have an optional
  * dependency on the d6_file migration to ensure it runs first.
- *
- * @MigrateDestination(
- *   id = "entity:image_style"
- * )
  */
+#[MigrateDestination('entity:image_style')]
 class EntityImageStyle extends EntityConfigBase {
 
   /**
diff --git a/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php b/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php
index 4d13e9adb4b99d4e5ae9dcec98eca3dd90bcca62..8a6451b52b2f30b00a7440ebf70ca60b87045c31 100644
--- a/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php
+++ b/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php
@@ -3,17 +3,15 @@
 namespace Drupal\language\Plugin\migrate\destination;
 
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\Plugin\migrate\destination\Config;
 use Drupal\migrate\Row;
 
 /**
  * Provides a destination plugin for the default langcode config.
- *
- * @MigrateDestination(
- *   id = "default_langcode"
- * )
  */
+#[MigrateDestination('default_langcode')]
 class DefaultLangcode extends Config {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Config.php b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
index 3c037466fbada20d0dac491c206b816189985d94..ea560e1832224a8a8cce85b5dc2e63328c05a35f 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Config.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Entity\DependencyTrait;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -64,11 +65,8 @@
  * "d6_variable_translation" source plugin.
  *
  * @see \Drupal\migrate_drupal\Plugin\migrate\source\d6\VariableTranslation
- *
- * @MigrateDestination(
- *   id = "config"
- * )
  */
+#[MigrateDestination('config')]
 class Config extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
 
   use DependencyTrait;
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 503a537a978197c32ab0a644243ba9c6c9618eb6..49cbf873987e6b8b2c6bbc7310aa9fa5ec131861 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -9,7 +9,9 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\EntityFieldDefinitionTrait;
+use Drupal\migrate\Plugin\Derivative\MigrateEntity;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -57,12 +59,11 @@
  * @endcode
  *
  * This will save the processed, migrated row as a node of type 'custom'.
- *
- * @MigrateDestination(
- *   id = "entity",
- *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntity"
- * )
  */
+#[MigrateDestination(
+  id: 'entity',
+  deriver: MigrateEntity::class
+)]
 abstract class Entity extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
 
   use DependencyTrait;
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityBaseFieldOverride.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityBaseFieldOverride.php
index e6b3682eb0bb1e8e3575e956f0b3f8d2eb130884..0d22d6708297d3679d997666977adf01c88f365e 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityBaseFieldOverride.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityBaseFieldOverride.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Row;
 
 /**
@@ -41,11 +42,8 @@
  *   required:
  *     - d6_node_type
  * @endcode
- *
- * @MigrateDestination(
- *   id = "entity:base_field_override"
- * )
  */
+#[MigrateDestination('entity:base_field_override')]
 class EntityBaseFieldOverride extends EntityConfigBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
index f4d565a6014c519ad06183df57532900eb33ffe1..2823b572fada49bab30141ce3bab441e04dce7f7 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
@@ -5,18 +5,19 @@
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityChangedInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\EntityFieldDefinitionTrait;
+use Drupal\migrate\Plugin\Derivative\MigrateEntityComplete;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
 use Drupal\migrate\Row;
 
 /**
  * Provides a destination for migrating the entire entity revision table.
- *
- * @MigrateDestination(
- *   id = "entity_complete",
- *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntityComplete"
- * )
  */
+#[MigrateDestination(
+  id: 'entity_complete',
+  deriver: MigrateEntityComplete::class
+)]
 class EntityContentComplete extends EntityContentBase {
 
   use EntityFieldDefinitionTrait;
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
index 090ec3a93a7cb766cda12c7a0cf8e23639d3a1da..70051aedf132f4c3077c43178064202762d95c2f 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
+
 /**
  * Provides destination plugin for field_config configuration entities.
  *
@@ -40,11 +42,8 @@
  *
  * @see \Drupal\field\Entity\FieldConfig
  * @see \Drupal\field\Entity\FieldConfigBase
- *
- * @MigrateDestination(
- *   id = "entity:field_config"
- * )
  */
+#[MigrateDestination('entity:field_config')]
 class EntityFieldInstance extends EntityConfigBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
index 0b9714a79b11e1de973ee63d3253456f185ec090..0a3530869b307a78ea2266fe953a5b2a44a7e9d7 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
+
 /**
  * Provides destination plugin for field_storage_config configuration entities.
  *
@@ -45,11 +47,8 @@
  *
  * For an example on how to migrate a Field instance of this FieldStorage,
  * refer to \Drupal\migrate\Plugin\migrate\destination\EntityFieldInstance.
- *
- * @MigrateDestination(
- *   id = "entity:field_storage_config"
- * )
  */
+#[MigrateDestination('entity:field_storage_config')]
 class EntityFieldStorageConfig extends EntityConfigBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
index 25bf5c7e96ff0d96f50d5c48dbe8fa5e921de703..fcf5148c90df89f50e256437a15f1ea9c363ff22 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
@@ -8,7 +8,9 @@
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Drupal\Core\Session\AccountSwitcherInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\MigrateException;
+use Drupal\migrate\Plugin\Derivative\MigrateEntityRevision;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 
@@ -104,12 +106,11 @@
  *   required:
  *     - custom_article_migration
  * @endcode
- *
- * @MigrateDestination(
- *   id = "entity_revision",
- *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntityRevision"
- * )
  */
+#[MigrateDestination(
+  id: 'entity_revision',
+  deriver: MigrateEntityRevision::class
+)]
 class EntityRevision extends EntityContentBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
index b2c25a45970db31dc00510f31bc7dccf89e6add1..14cea6058cf49401170acf581792c74dc852d8b0 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
+
 /**
  * Provides entity view mode destination plugin.
  *
@@ -23,11 +25,8 @@
  *
  * This will add the results of the process ("mode", "label" and
  * "targetEntityType") to an "entity_view_mode" entity.
- *
- * @MigrateDestination(
- *   id = "entity:entity_view_mode"
- * )
  */
+#[MigrateDestination('entity:entity_view_mode')]
 class EntityViewMode extends EntityConfigBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/NullDestination.php b/core/modules/migrate/src/Plugin/migrate/destination/NullDestination.php
index 96ba3a7ea57563dc7857e53188d4c9244f233a19..170072b9dff0aa5ce9adb24d8c415f4828ed6d2c 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/NullDestination.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/NullDestination.php
@@ -2,16 +2,16 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Row;
 
 /**
  * Provides null destination plugin.
- *
- * @MigrateDestination(
- *   id = "null",
- *   requirements_met = false
- * )
  */
+#[MigrateDestination(
+  id: 'null',
+  requirements_met: FALSE
+)]
 class NullDestination extends DestinationBase {
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
index 499ff0f45f4ddc9262337b93b42cd724b2f4808d..17675bd7c2da6e0c33d75e684b51af6cee88b65a 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
+
 /**
  * This class imports one component of an entity display.
  *
@@ -43,11 +45,8 @@
  * This will add the "user_picture" image field to the "default" view mode of
  * the "user" bundle of the "user" entity type with options as defined by the
  * "options" constant, for example the label will be hidden.
- *
- * @MigrateDestination(
- *   id = "component_entity_display"
- * )
  */
+#[MigrateDestination('component_entity_display')]
 class PerComponentEntityDisplay extends ComponentEntityDisplayBase {
 
   const MODE_NAME = 'view_mode';
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
index 667e8fbcb0dbea746d07030c79a15db8693e9ab2..b449dbcfd4e4f563581e04fa3ae99b389aed1c09 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
+
 /**
  * This class imports one component of an entity form display.
  *
@@ -36,11 +38,8 @@
  *
  * This will add a "comment" field on the "default" form mode of the "node"
  * entity type with options defined by the "options" constant.
- *
- * @MigrateDestination(
- *   id = "component_entity_form_display"
- * )
  */
+#[MigrateDestination('component_entity_form_display')]
 class PerComponentEntityFormDisplay extends ComponentEntityDisplayBase {
 
   const MODE_NAME = 'form_mode';
diff --git a/core/modules/migrate/tests/modules/migrate_events_test/src/Plugin/migrate/destination/DummyDestination.php b/core/modules/migrate/tests/modules/migrate_events_test/src/Plugin/migrate/destination/DummyDestination.php
index 568c207af838244f104197d4cd3123dc4b93c3f7..77b55e0d2db8addd6d804efb0712954dd1567e04 100644
--- a/core/modules/migrate/tests/modules/migrate_events_test/src/Plugin/migrate/destination/DummyDestination.php
+++ b/core/modules/migrate/tests/modules/migrate_events_test/src/Plugin/migrate/destination/DummyDestination.php
@@ -2,15 +2,17 @@
 
 namespace Drupal\migrate_events_test\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
 use Drupal\migrate\Row;
 
 /**
- * @MigrateDestination(
- *   id = "dummy",
- *   requirements_met = true
- * )
+ * Migration dummy destination.
  */
+#[MigrateDestination(
+  id: 'dummy',
+  requirements_met: TRUE
+)]
 class DummyDestination extends DestinationBase {
 
   /**
diff --git a/core/modules/node/src/Plugin/migrate/destination/EntityNodeType.php b/core/modules/node/src/Plugin/migrate/destination/EntityNodeType.php
index cdee1f5fcfa8e56271e755e0a2b7bc84ec33781e..9ea39ebda9aa4685b877a16659fa221fa13d40f1 100644
--- a/core/modules/node/src/Plugin/migrate/destination/EntityNodeType.php
+++ b/core/modules/node/src/Plugin/migrate/destination/EntityNodeType.php
@@ -2,14 +2,14 @@
 
 namespace Drupal\node\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Row;
 
 /**
- * @MigrateDestination(
- *   id = "entity:node_type"
- * )
+ * Migration destination for node type entity.
  */
+#[MigrateDestination('entity:node_type')]
 class EntityNodeType extends EntityConfigBase {
 
   /**
diff --git a/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php b/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php
index e2210c7034111c1b7c5d6c0270814af551b7e400..ab008f33302f8e6ebee66e26d8688d473e2a8d83 100644
--- a/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php
+++ b/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -17,11 +18,8 @@
 
 /**
  * Migrate destination for search page.
- *
- * @MigrateDestination(
- *   id = "entity:search_page"
- * )
  */
+#[MigrateDestination('entity:search_page')]
 class EntitySearchPage extends EntityConfigBase {
 
   /**
diff --git a/core/modules/shortcut/src/Plugin/migrate/destination/EntityShortcutSet.php b/core/modules/shortcut/src/Plugin/migrate/destination/EntityShortcutSet.php
index fddf08a7126118e384d0163aaddac53bdf3bf2fd..0f0ec102a847940560d2eb8eb81d25b2a422eb9f 100644
--- a/core/modules/shortcut/src/Plugin/migrate/destination/EntityShortcutSet.php
+++ b/core/modules/shortcut/src/Plugin/migrate/destination/EntityShortcutSet.php
@@ -2,14 +2,14 @@
 
 namespace Drupal\shortcut\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Row;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 
 /**
- * @MigrateDestination(
- *   id = "entity:shortcut_set"
- * )
+ * Migration destination for shortcut set entity.
  */
+#[MigrateDestination('entity:shortcut_set')]
 class EntityShortcutSet extends EntityConfigBase {
 
   /**
diff --git a/core/modules/shortcut/src/Plugin/migrate/destination/ShortcutSetUsers.php b/core/modules/shortcut/src/Plugin/migrate/destination/ShortcutSetUsers.php
index b6775372e34054377e19100850880b8cad2ffd15..f52892f4d381390a684224b5c1aceec13dcf4830 100644
--- a/core/modules/shortcut/src/Plugin/migrate/destination/ShortcutSetUsers.php
+++ b/core/modules/shortcut/src/Plugin/migrate/destination/ShortcutSetUsers.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\shortcut\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\shortcut\ShortcutSetStorageInterface;
 use Drupal\user\Entity\User;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -11,10 +12,9 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 
 /**
- * @MigrateDestination(
- *   id = "shortcut_set_users"
- * )
+ * Migration destination for shortcut_set_users.
  */
+#[MigrateDestination('shortcut_set_users')]
 class ShortcutSetUsers extends DestinationBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php b/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php
index 83bc648298f66c1e65d1fddf1a5d69c1f13592ae..80149345a71d3630a083fa61656990dadcce3f41 100644
--- a/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php
+++ b/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
@@ -13,12 +14,11 @@
 
 /**
  * Destination for node counter.
- *
- * @MigrateDestination(
- *   id = "node_counter",
- *   destination_module = "statistics"
- * )
  */
+#[MigrateDestination(
+  id: 'node_counter',
+  destination_module: 'statistics'
+)]
 class NodeCounter extends DestinationBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/system/src/Plugin/migrate/destination/EntityDateFormat.php b/core/modules/system/src/Plugin/migrate/destination/EntityDateFormat.php
index 5bc98b9bc74af6c80b58c19f6d6882caa72daeef..a65960b06fd5499f29fa4b1740279e3c553c8d5c 100644
--- a/core/modules/system/src/Plugin/migrate/destination/EntityDateFormat.php
+++ b/core/modules/system/src/Plugin/migrate/destination/EntityDateFormat.php
@@ -4,13 +4,13 @@
 
 use Drupal\Core\Datetime\DateFormatInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 
 /**
- * @MigrateDestination(
- *   id = "entity:date_format"
- * )
+ * Migration destination for date format entity.
  */
+#[MigrateDestination('entity:date_format')]
 class EntityDateFormat extends EntityConfigBase {
 
   /**
diff --git a/core/modules/system/src/Plugin/migrate/destination/d7/ThemeSettings.php b/core/modules/system/src/Plugin/migrate/destination/d7/ThemeSettings.php
index ee1567457d9aeb5bbb1241b2f0950ac47f12839c..fb3f49cb59152849e237361ec5aea09eba58f57c 100644
--- a/core/modules/system/src/Plugin/migrate/destination/d7/ThemeSettings.php
+++ b/core/modules/system/src/Plugin/migrate/destination/d7/ThemeSettings.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
@@ -11,11 +12,8 @@
 
 /**
  * Persist theme settings to the config system.
- *
- * @MigrateDestination(
- *   id = "d7_theme_settings"
- * )
  */
+#[MigrateDestination('d7_theme_settings')]
 class ThemeSettings extends DestinationBase implements ContainerFactoryPluginInterface {
 
   /**
diff --git a/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyVocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyVocabulary.php
index 20990337acf410eff6175de9d4b9b77891a3ed06..79afcaa4cec8a59cae3c201ec175ef56a132e8bd 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyVocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/destination/EntityTaxonomyVocabulary.php
@@ -4,14 +4,14 @@
 
 namespace Drupal\taxonomy\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Row;
 
 /**
- * @MigrateDestination(
- *   id = "entity:taxonomy_vocabulary"
- * )
+ * Migration destination for taxonomy vocabulary.
  */
+#[MigrateDestination('entity:taxonomy_vocabulary')]
 class EntityTaxonomyVocabulary extends EntityConfigBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
index f9ecc201c2f7589470da4c061586f54efd6e5e18..c05661bbb01fdbea82adb4ca9f3c91454e6ec0de 100644
--- a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
+++ b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
@@ -9,6 +9,7 @@
 use Drupal\Core\Field\Plugin\Field\FieldType\EmailItem;
 use Drupal\Core\Password\PasswordInterface;
 use Drupal\Core\Session\AccountSwitcherInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
 use Drupal\migrate\Row;
@@ -61,11 +62,8 @@
  * on different password hash types and a list of other user properties, refer
  * to the handbook documentation:
  * @see https://www.drupal.org/docs/8/api/migrate-api/migrate-destination-plugins-examples/migrating-users
- *
- * @MigrateDestination(
- *   id = "entity:user"
- * )
  */
+#[MigrateDestination('entity:user')]
 class EntityUser extends EntityContentBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/destination/EntityUserRole.php b/core/modules/user/src/Plugin/migrate/destination/EntityUserRole.php
index a70a3d99597769205bd93464f9d3d93a02d15437..02bf9c7f2bacabc16d9f5d023dd41ef7c516173f 100644
--- a/core/modules/user/src/Plugin/migrate/destination/EntityUserRole.php
+++ b/core/modules/user/src/Plugin/migrate/destination/EntityUserRole.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
@@ -12,11 +13,8 @@
 
 /**
  * Provides a destination plugin for migrating user role entities.
- *
- * @MigrateDestination(
- *   id = "entity:user_role"
- * )
  */
+#[MigrateDestination('entity:user_role')]
 class EntityUserRole extends EntityConfigBase {
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/destination/UserData.php b/core/modules/user/src/Plugin/migrate/destination/UserData.php
index b3d46558a538b450659e8414e5a93bc319dc9cbd..183e3d9b901a1b03bbd3f8df011305659231f3e7 100644
--- a/core/modules/user/src/Plugin/migrate/destination/UserData.php
+++ b/core/modules/user/src/Plugin/migrate/destination/UserData.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\user\Plugin\migrate\destination;
 
+use Drupal\migrate\Attribute\MigrateDestination;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\user\UserData as UserDataStorage;
 use Drupal\migrate\Row;
@@ -10,10 +11,9 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 
 /**
- * @MigrateDestination(
- *   id = "user_data"
- * )
+ * Migration destination for user data.
  */
+#[MigrateDestination('user_data')]
 class UserData extends DestinationBase implements ContainerFactoryPluginInterface {
 
   /**