diff --git a/core/lib/Drupal/Core/Plugin/Discovery/HookDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/HookDiscovery.php
index 3ff05f9..9a35498 100644
--- a/core/lib/Drupal/Core/Plugin/Discovery/HookDiscovery.php
+++ b/core/lib/Drupal/Core/Plugin/Discovery/HookDiscovery.php
@@ -51,7 +51,6 @@ class HookDiscovery implements DiscoveryInterface {
         $definitions[$plugin_id] = $definition;
       }
     }
-    drupal_alter($this->hook, $definitions);
     return $definitions;
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Plugin/AlterDecoratorTest.php b/core/modules/system/lib/Drupal/system/Tests/Plugin/AlterDecoratorTest.php
new file mode 100644
index 0000000..11a1f85
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Plugin/AlterDecoratorTest.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system\Tests\Plugin\AlterDecoratorTest.
+ */
+
+namespace Drupal\system\Tests\Plugin;
+
+use Drupal\Component\Plugin\Exception\ExceptionInterface;
+use Exception;
+use Drupal\plugin_test\Plugin\AlterDecoratorTestPluginManager;
+use Drupal\plugin_test\Plugin\TestPluginManager;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests that the AlterDecorator fires and respects the alter hook.
+ */
+class AlterDecoratorTest extends WebTestBase {
+  /**
+   * Stores a plugin manager which uses the AlterDecorator.
+   *
+   * @var Drupal\plugin_test\Plugin\AlterDecoratorTestPluginManager;
+   */
+  protected $alterTestPluginManager;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'AlterDecorator',
+      'description' => 'Tests that the AlterDecorator fires and respects the alter hook.',
+      'group' => 'Plugin API',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp('plugin_test');
+
+    // Setup a plugin manager which uses the alter decorator.
+    $this->alterTestPluginManager = new AlterDecoratorTestPluginManager();
+  }
+
+  /**
+   * Tests getDefinitions() and getDefinition() of Drupal\Core\Plugin\Discovery\AlterDecorator.
+   */
+  public function testAlterDecorator() {
+    // Ensure that getDefinitions() fires and changes the actual plugin definitions.
+    $definitions = $this->alterTestPluginManager->getDefinitions();
+    foreach ($definitions as &$definition) {
+      $this->assertTrue($definition['altered']);
+    }
+
+    // Ensure that getDefinitions() fires and changes the actual plugin definition.
+    $definition = $this->alterTestPluginManager->getDefinition('user_login');
+    $this->assertTrue($definition['altered_single']);
+  }
+
+}
diff --git a/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/AlterDecoratorTestPluginManager.php b/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/AlterDecoratorTestPluginManager.php
new file mode 100644
index 0000000..2168b8b
--- /dev/null
+++ b/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/AlterDecoratorTestPluginManager.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\plugin_test\Plugin\plugin_test\AlterDecoratorTestPluginManager.
+ */
+
+namespace Drupal\plugin_test\Plugin;
+
+use Drupal\Core\Plugin\Discovery\AlterDecorator;
+
+/**
+ * Defines a plugin manager used by AlterDecorator unit tests.
+ */
+class AlterDecoratorTestPluginManager extends TestPluginManager {
+  public function __construct() {
+    parent::__construct();
+    $this->discovery = new AlterDecorator($this->discovery, 'plugin_test');
+  }
+}
diff --git a/core/modules/system/tests/modules/plugin_test/plugin_test.module b/core/modules/system/tests/modules/plugin_test/plugin_test.module
index dc6986d..5f5893f 100644
--- a/core/modules/system/tests/modules/plugin_test/plugin_test.module
+++ b/core/modules/system/tests/modules/plugin_test/plugin_test.module
@@ -4,3 +4,13 @@
  * @file
  * Helper module for the plugin tests.
  */
+
+/**
+ * Implements hook_plugin_plugin_test_alter().
+ */
+function plugin_test_plugin_plugin_test_alter(&$definitions) {
+  foreach ($definitions as &$definition) {
+    $definition['altered'] = TRUE;
+  }
+  $definitions['user_login']['altered_single'] = TRUE;
+}
