diff --git a/core/includes/common.inc b/core/includes/common.inc
index 85d5f3a..7ace7e1 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1200,7 +1200,7 @@ function show(&$element) {
  * Retrieves the default properties for the defined element type.
  *
  * @param $type
- *   An element type as defined by hook_element_info().
+ *   An element type as defined by hook_element_info() or an element plugin.
  *
  * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
  *   Use \Drupal::service('element_info')->getInfo() instead.
@@ -1213,7 +1213,7 @@ function element_info($type) {
  * Retrieves a single property for the defined element type.
  *
  * @param $type
- *   An element type as defined by hook_element_info().
+ *   An element type as defined by an element plugin.
  * @param $property_name
  *   The property within the element type that should be returned.
  * @param $default
diff --git a/core/lib/Drupal/Core/Render/Element/MachineName.php b/core/lib/Drupal/Core/Render/Element/MachineName.php
index 7256e8d..c31cc9d 100644
--- a/core/lib/Drupal/Core/Render/Element/MachineName.php
+++ b/core/lib/Drupal/Core/Render/Element/MachineName.php
@@ -135,7 +135,8 @@ public static function processMachineName(&$element, FormStateInterface $form_st
     );
     // A form element that only wants to set one #machine_name property (usually
     // 'source' only) would leave all other properties undefined, if the defaults
-    // were defined in hook_element_info(). Therefore, we apply the defaults here.
+    // were defined in hook_element_info() or by an element plugin. Therefore,
+    // we apply the defaults here.
     $element['#machine_name'] += array(
       'source' => array('label'),
       'target' => '#' . $element['#id'],
diff --git a/core/lib/Drupal/Core/Render/ElementInfoManager.php b/core/lib/Drupal/Core/Render/ElementInfoManager.php
index 1bc1600..bf9b971 100644
--- a/core/lib/Drupal/Core/Render/ElementInfoManager.php
+++ b/core/lib/Drupal/Core/Render/ElementInfoManager.php
@@ -110,10 +110,7 @@ protected function buildInfo($theme_name) {
     }
 
     // Otherwise, rebuild and cache.
-    // @todo Remove this hook once all elements are converted to plugins in
-    //   https://www.drupal.org/node/2311393.
-    $info = $this->moduleHandler->invokeAll('element_info');
-
+    $info = [];
     foreach ($this->getDefinitions() as $element_type => $definition) {
       $element = $this->createInstance($element_type);
       $element_info = $element->getInfo();
diff --git a/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php b/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php
index 5fc53f9..0b98d82 100644
--- a/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php
+++ b/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php
@@ -44,8 +44,6 @@
    *   - #title_display: optional string indicating if and how #title should be
    *     displayed (see form-element.html.twig).
    *
-   * @see hook_element_info()
-   * @see hook_element_info_alter()
    * @see \Drupal\Core\Render\Element\ElementInterface
    * @see \Drupal\Core\Render\Element\ElementInterface::getInfo()
    */
@@ -55,7 +53,7 @@ public function getInfo($type);
    * Retrieves a single property for the defined element type.
    *
    * @param string $type
-   *   An element type as defined by hook_element_info().
+   *   An element type as defined by hook_element_info() or an element plugin.
    * @param string $property_name
    *   The property within the element type that should be returned.
    * @param $default
diff --git a/core/lib/Drupal/Core/Render/RendererInterface.php b/core/lib/Drupal/Core/Render/RendererInterface.php
index 155eec4..0eef6e5 100644
--- a/core/lib/Drupal/Core/Render/RendererInterface.php
+++ b/core/lib/Drupal/Core/Render/RendererInterface.php
@@ -148,11 +148,11 @@ public function renderPlain(&$elements);
    *     $pre_bubbling_cid.
    *   - If this element has #type defined and the default attributes for this
    *     element have not already been merged in (#defaults_loaded = TRUE) then
-   *     the defaults for this type of element, defined in hook_element_info(),
-   *     are merged into the array. #defaults_loaded is set by functions that
-   *     process render arrays and call the element info service before passing
-   *     the array to Renderer::render(), such as form_builder() in the Form
-   *     API.
+   *     the defaults for this type of element, defined in hook_element_info()
+   *     or by an element plugin, are merged into the array. #defaults_loaded is
+   *     set by functions that process render arrays and call the element info
+   *     service before passing the array to Renderer::render(), such as
+   *     form_builder() in the Form API.
    *   - If this element has #create_placeholder set to TRUE, and it has a
    *     #lazy_builder callback, then the element is replaced with another
    *     element that has only two properties: #markup and #attached. #markup
diff --git a/core/lib/Drupal/Core/Render/theme.api.php b/core/lib/Drupal/Core/Render/theme.api.php
index 8fd05c3..eda47d9 100644
--- a/core/lib/Drupal/Core/Render/theme.api.php
+++ b/core/lib/Drupal/Core/Render/theme.api.php
@@ -294,10 +294,8 @@
  * on plugins, and look for classes with the RenderElement or FormElement
  * annotation to discover what render elements are available.
  *
- * Modules can also currently define render elements by implementing
- * hook_element_info(), although defining a plugin is preferred.
- * properties. Look through implementations of hook_element_info() to discover
- * elements defined this way.
+ * Modules can define render elements by defining an element plugin or by
+ * implementing hook_element_info(), however, hook_element_info() is deprecated.
  *
  * @section sec_caching Caching
  * The Drupal rendering process has the ability to cache rendered output at any
@@ -691,32 +689,6 @@ function hook_render_template($template_file, $variables) {
 }
 
 /**
- * Allows modules to declare their own Form API element types and specify their
- * default values.
- *
- * This hook allows modules to declare their own form element types and to
- * specify their default values. The values returned by this hook will be
- * merged with the elements returned by form constructor implementations and so
- * can return defaults for any Form APIs keys in addition to those explicitly
- * documented by \Drupal\Core\Render\ElementInfoManagerInterface::getInfo().
- *
- * @return array
- *   An associative array with structure identical to that of the return value
- *   of \Drupal\Core\Render\ElementInfoManagerInterface::getInfo().
- *
- * @deprecated Use an annotated class instead, see
- *   \Drupal\Core\Render\Element\ElementInterface.
- *
- * @see hook_element_info_alter()
- */
-function hook_element_info() {
-  $types['filter_format'] = array(
-    '#input' => TRUE,
-  );
-  return $types;
-}
-
-/**
  * Alter the element type information returned from modules.
  *
  * A module may implement this hook in order to alter the element type defaults
@@ -726,7 +698,8 @@ function hook_element_info() {
  *   An associative array with structure identical to that of the return value
  *   of \Drupal\Core\Render\ElementInfoManagerInterface::getInfo().
  *
- * @see hook_element_info()
+ * @see \Drupal\Core\Render\ElementInfoManager
+ * @see \Drupal\Core\Render\Element\ElementInterface
  */
 function hook_element_info_alter(array &$types) {
   // Decrease the default size of textfields.
diff --git a/core/modules/contextual/contextual.api.php b/core/modules/contextual/contextual.api.php
index d972045..a797429 100644
--- a/core/modules/contextual/contextual.api.php
+++ b/core/modules/contextual/contextual.api.php
@@ -29,7 +29,6 @@
  * @see hook_contextual_links_alter()
  * @see hook_contextual_links_plugins_alter()
  * @see contextual_pre_render_links()
- * @see contextual_element_info()
  */
 function hook_contextual_links_view_alter(&$element, $items) {
   // Add another class to all contextual link lists to facilitate custom
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index cd7d157..43e9446 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -58,7 +58,7 @@ function editor_menu_links_discovered_alter(array &$links) {
  * module), so that selecting a text format notifies a client-side text editor
  * when it should be enabled or disabled.
  *
- * @see filter_element_info()
+ * @see \Drupal\filter\Element\TextFormat
  */
 function editor_element_info_alter(&$types) {
   $types['text_format']['#pre_render'][] = 'element.editor:preRenderTextFormat';
diff --git a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
index 3ba0258..b2275d0 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
@@ -678,9 +678,6 @@ public function multistepAjax($form, FormStateInterface $form_state) {
   /**
    * Performs pre-render tasks on field_ui_table elements.
    *
-   * This function is assigned as a #pre_render callback in
-   * field_ui_element_info().
-   *
    * @param array $elements
    *   A structured array containing two sub-levels of elements. Properties
    *   used:
@@ -688,6 +685,8 @@ public function multistepAjax($form, FormStateInterface $form_state) {
    *     drupal_attach_tabledrag(). The HTML ID of the table is added to each
    *     $options array.
    *
+   * @return array
+   *
    * @see drupal_render()
    * @see \Drupal\Core\Render\Element\Table::preRenderTable()
    */
diff --git a/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php b/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
index b0ca1f7..e0d3717 100644
--- a/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
@@ -67,101 +67,6 @@ protected function setUp() {
   }
 
   /**
-   * Tests the getInfo method.
-   *
-   * @covers ::getInfo
-   * @covers ::buildInfo
-   *
-   * @dataProvider providerTestGetInfo
-   */
-  public function testGetInfo($type, $expected_info, $element_info, callable $alter_callback = NULL) {
-    $this->moduleHandler->expects($this->once())
-      ->method('invokeAll')
-      ->with('element_info')
-      ->will($this->returnValue($element_info));
-    $this->moduleHandler->expects($this->once())
-      ->method('alter')
-      ->with('element_info', $this->anything())
-      ->will($this->returnCallback($alter_callback ?: function($info) {
-        return $info;
-      }));
-    $this->themeManager->expects($this->once())
-      ->method('getActiveTheme')
-      ->willReturn(new ActiveTheme(['name' => 'test']));
-    $this->themeManager->expects($this->once())
-      ->method('alter')
-      ->with('element_info', $this->anything())
-      ->will($this->returnCallback($alter_callback ?: function($info) {
-        return $info;
-      }));
-
-    $this->cache->expects($this->at(0))
-      ->method('get')
-      ->with('element_info_build:test')
-      ->will($this->returnValue(FALSE));
-    $this->cache->expects($this->at(1))
-      ->method('get')
-      ->with('element_info')
-      ->will($this->returnValue(FALSE));
-    $this->cache->expects($this->at(2))
-      ->method('set')
-      ->with('element_info');
-    $this->cache->expects($this->at(3))
-      ->method('set')
-      ->with('element_info_build:test');
-
-    $this->assertEquals($expected_info, $this->elementInfo->getInfo($type));
-  }
-
-  /**
-   * Provides tests data for getInfo.
-   *
-   * @return array
-   */
-  public function providerTestGetInfo() {
-    $data = array();
-    // Provide an element and expect it is returned.
-    $data[] = array(
-      'page',
-      array(
-        '#type' => 'page',
-        '#theme' => 'page',
-        '#defaults_loaded' => TRUE,
-      ),
-      array('page' => array(
-        '#theme' => 'page',
-      )),
-    );
-    // Provide an element but request an non existent one.
-    $data[] = array(
-      'form',
-      array(
-        '#defaults_loaded' => TRUE,
-      ),
-      array('page' => array(
-        '#theme' => 'page',
-      )),
-    );
-    // Provide an element and alter it to ensure it is altered.
-    $data[] = array(
-      'page',
-      array(
-        '#type' => 'page',
-        '#theme' => 'page',
-        '#number' => 597219,
-        '#defaults_loaded' => TRUE,
-      ),
-      array('page' => array(
-        '#theme' => 'page',
-      )),
-      function ($alter_name, array &$info) {
-        $info['page']['#number'] = 597219;
-      }
-    );
-    return $data;
-  }
-
-  /**
    * Tests the getInfo() method when render element plugins are used.
    *
    * @covers ::getInfo
@@ -171,10 +76,6 @@ function ($alter_name, array &$info) {
    */
   public function testGetInfoElementPlugin($plugin_class, $expected_info) {
     $this->moduleHandler->expects($this->once())
-      ->method('invokeAll')
-      ->with('element_info')
-      ->willReturn(array());
-    $this->moduleHandler->expects($this->once())
       ->method('alter')
       ->with('element_info', $this->anything())
       ->will($this->returnArgument(0));
