From 248284df26bbb023087859d8aacea7bcb0ec6da9 Mon Sep 17 00:00:00 2001
From: Dries <dries@buytaert.net>
Date: Wed, 16 Jan 2013 11:02:59 -0500
Subject: [PATCH] Issue #1889826 by tim.plunkett:
 DefaultFactory::getPluginClass() is very useful and should be public and
 static.

---
 .../Drupal/Component/Plugin/Factory/DefaultFactory.php    | 8 +++++---
 .../Drupal/Component/Plugin/Factory/ReflectionFactory.php | 2 +-
 .../field/Plugin/Type/Formatter/FormatterFactory.php      | 2 +-
 .../lib/Drupal/field/Plugin/Type/Widget/WidgetFactory.php | 2 +-
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php b/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php
index 356967b987cf..168d5d7cf343 100644
--- a/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php
+++ b/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php
@@ -41,7 +41,7 @@ public function __construct(DiscoveryInterface $discovery) {
    * Implements Drupal\Component\Plugin\Factory\FactoryInterface::createInstance().
    */
   public function createInstance($plugin_id, array $configuration) {
-    $plugin_class = $this->getPluginClass($plugin_id);
+    $plugin_class = static::getPluginClass($plugin_id, $this->discovery);
     return new $plugin_class($configuration, $plugin_id, $this->discovery);
   }
 
@@ -50,12 +50,14 @@ public function createInstance($plugin_id, array $configuration) {
    *
    *  @param array $plugin_id
    *    The id of a plugin.
+   * @param \Drupal\Component\Plugin\Discovery\DiscoveryInterface $discovery
+   *   The discovery object.
    *
    *  @return string
    *    The appropriate class name.
    */
-  protected function getPluginClass($plugin_id) {
-    $plugin_definition = $this->discovery->getDefinition($plugin_id);
+  public static function getPluginClass($plugin_id, DiscoveryInterface $discovery) {
+    $plugin_definition = $discovery->getDefinition($plugin_id);
     if (empty($plugin_definition['class'])) {
       throw new PluginException(sprintf('The plugin (%s) did not specify an instance class.', $plugin_id));
     }
diff --git a/core/lib/Drupal/Component/Plugin/Factory/ReflectionFactory.php b/core/lib/Drupal/Component/Plugin/Factory/ReflectionFactory.php
index a81b868d6fa9..50b38683866b 100644
--- a/core/lib/Drupal/Component/Plugin/Factory/ReflectionFactory.php
+++ b/core/lib/Drupal/Component/Plugin/Factory/ReflectionFactory.php
@@ -20,7 +20,7 @@ class ReflectionFactory extends DefaultFactory {
    * Implements Drupal\Component\Plugin\Factory\FactoryInterface::createInstance().
    */
   public function createInstance($plugin_id, array $configuration) {
-    $plugin_class = $this->getPluginClass($plugin_id);
+    $plugin_class = static::getPluginClass($plugin_id, $this->discovery);
 
     // Lets figure out of there's a constructor for this class and pull
     // arguments from the $options array if so to populate it.
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterFactory.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterFactory.php
index bb7d06655d35..a0bf0c22ae24 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterFactory.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterFactory.php
@@ -18,7 +18,7 @@ class FormatterFactory extends DefaultFactory {
    * Overrides Drupal\Component\Plugin\Factory\DefaultFactory::createInstance().
    */
   public function createInstance($plugin_id, array $configuration) {
-    $plugin_class = $this->getPluginClass($plugin_id);
+    $plugin_class = static::getPluginClass($plugin_id, $this->discovery);
     return new $plugin_class($plugin_id, $this->discovery, $configuration['instance'], $configuration['settings'], $configuration['label'], $configuration['view_mode']);
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetFactory.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetFactory.php
index 851cbea03763..4b6e7dcd4d8f 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetFactory.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetFactory.php
@@ -18,7 +18,7 @@ class WidgetFactory extends DefaultFactory {
    * Overrides Drupal\Component\Plugin\Factory\DefaultFactory::createInstance().
    */
   public function createInstance($plugin_id, array $configuration) {
-    $plugin_class = $this->getPluginClass($plugin_id);
+    $plugin_class = static::getPluginClass($plugin_id, $this->discovery);
     return new $plugin_class($plugin_id, $this->discovery, $configuration['instance'], $configuration['settings'], $configuration['weight']);
   }
 }
-- 
GitLab