From 2f370af9c5dbfd7b52639d3bd42818c21066824e Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 5 Jun 2015 19:52:32 +0100
Subject: [PATCH] Issue #2195573 by Xano, eiriksm, heddn, ParisLiakos, Les Lim,
 Pere Orga, dinarcon, xjm, alexpott: Add a dedicated @LanguageNegotiation
 annotation class

---
 .../src/Annotation/LanguageNegotiation.php    | 82 +++++++++++++++++++
 .../src/LanguageNegotiationMethodManager.php  |  2 +-
 .../LanguageNegotiationBrowser.php            |  2 +-
 .../LanguageNegotiationSelected.php           |  2 +-
 .../LanguageNegotiationSession.php            |  2 +-
 .../LanguageNegotiationUI.php                 |  2 +-
 .../LanguageNegotiationUrl.php                |  2 +-
 .../LanguageNegotiationUrlFallback.php        |  2 +-
 .../LanguageNegotiationTest.php               |  2 +-
 .../LanguageNegotiationTestTs.php             |  2 +-
 .../LanguageNegotiationUser.php               |  2 +-
 .../LanguageNegotiationUserAdmin.php          |  2 +-
 12 files changed, 93 insertions(+), 11 deletions(-)
 create mode 100644 core/modules/language/src/Annotation/LanguageNegotiation.php

diff --git a/core/modules/language/src/Annotation/LanguageNegotiation.php b/core/modules/language/src/Annotation/LanguageNegotiation.php
new file mode 100644
index 000000000000..92f767bb2a84
--- /dev/null
+++ b/core/modules/language/src/Annotation/LanguageNegotiation.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Annotation\LanguageNegotiation.
+ */
+
+namespace Drupal\language\Annotation;
+
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines a language negotiation annotation object.
+ *
+ * Plugin Namespace: Plugin\LanguageNegotiation
+ *
+ * For a working example, see
+ * \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationBrowser.
+ *
+ * @see \Drupal\language\LanguageNegotiator
+ * @see \Drupal\language\LanguageNegotiationMethodManager
+ * @see \Drupal\language\LanguageNegotiationMethodInterface
+ * @see hook_language_negotiation_info_alter()
+ * @see plugin_api
+ *
+ * @Annotation
+ */
+class LanguageNegotiation extends Plugin {
+
+  /**
+   * The language negotiation plugin ID.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * An array of allowed language types.
+   *
+   * If a language negotiation plugin does not specify which language types it
+   * should be used with, it will be available for all the configurable
+   * language types.
+   *
+   * @var string[]
+   *   An array of language types, such as the
+   *   \Drupal\Core\Language\LanguageInterface::TYPE_* constants.
+   */
+  public $types;
+
+  /**
+   * The default weight of the language negotiation plugin.
+   *
+   * @var int
+   */
+  public $weight;
+
+  /**
+   * The human-readable name of the language negotiation plugin.
+   *
+   * @ingroup plugin_translatable
+   *
+   * @var \Drupal\Core\Annotation\Translation
+   */
+  public $name;
+
+  /**
+   * The description of the language negotiation plugin.
+   *
+   * @ingroup plugin_translatable
+   *
+   * @var \Drupal\Core\Annotation\Translation
+   */
+  public $description;
+
+  /**
+   * The route pointing to the plugin's configuration page.
+   *
+   * @var string
+   */
+  public $config_route_name;
+
+}
diff --git a/core/modules/language/src/LanguageNegotiationMethodManager.php b/core/modules/language/src/LanguageNegotiationMethodManager.php
index b263ed58270b..cf5925e4b668 100644
--- a/core/modules/language/src/LanguageNegotiationMethodManager.php
+++ b/core/modules/language/src/LanguageNegotiationMethodManager.php
@@ -28,7 +28,7 @@ class LanguageNegotiationMethodManager extends DefaultPluginManager {
    *   An object that implements ModuleHandlerInterface
    */
   public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
-    parent::__construct('Plugin/LanguageNegotiation', $namespaces, $module_handler, 'Drupal\language\LanguageNegotiationMethodInterface');
+    parent::__construct('Plugin/LanguageNegotiation', $namespaces, $module_handler, 'Drupal\language\LanguageNegotiationMethodInterface', 'Drupal\language\Annotation\LanguageNegotiation');
     $this->cacheBackend = $cache_backend;
     $this->cacheKeyPrefix = 'language_negotiation_plugins';
     $this->cacheKey = 'language_negotiation_plugins';
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationBrowser.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationBrowser.php
index 00c1fde60684..575d4f599f31 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationBrowser.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationBrowser.php
@@ -14,7 +14,7 @@
 /**
  * Class for identifying language from the browser Accept-language HTTP header.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationBrowser::METHOD_ID,
  *   weight = -2,
  *   name = @Translation("Browser"),
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSelected.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSelected.php
index c4cd150b3b41..142ce0e05acf 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSelected.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSelected.php
@@ -13,7 +13,7 @@
 /**
  * Class for identifying language from a selected language.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSelected::METHOD_ID,
  *   weight = 12,
  *   name = @Translation("Selected language"),
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
index 0341ca0d35ca..fe9500a4a0cc 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
@@ -18,7 +18,7 @@
 /**
  * Identify language from a request/session parameter.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSession::METHOD_ID,
  *   weight = -6,
  *   name = @Translation("Session"),
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUI.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUI.php
index 0935d1ed41c3..14c9f759deb6 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUI.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUI.php
@@ -13,7 +13,7 @@
 /**
  * Identifies the language from the interface text language selected for page.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI::METHOD_ID,
  *   types = {Drupal\Core\Language\LanguageInterface::TYPE_CONTENT},
  *   weight = 9,
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
index 91f45b5b1cac..6ea4aee76e81 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
@@ -19,7 +19,7 @@
 /**
  * Class for identifying language via URL prefix or domain.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl::METHOD_ID,
  *   types = {\Drupal\Core\Language\LanguageInterface::TYPE_INTERFACE,
  *   \Drupal\Core\Language\LanguageInterface::TYPE_CONTENT,
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrlFallback.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrlFallback.php
index abaa6e39051e..f585622cf83b 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrlFallback.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrlFallback.php
@@ -32,7 +32,7 @@
  *     fixed. This is done by introducing a prefix or domain in the rendered
  *     page matching the detected interface language.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback::METHOD_ID,
  *   types = {Drupal\Core\Language\LanguageInterface::TYPE_URL},
  *   weight = 8,
diff --git a/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTest.php b/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTest.php
index e9f9a2723d19..ea78138f1e3a 100644
--- a/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTest.php
+++ b/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTest.php
@@ -13,7 +13,7 @@
 /**
  * Class for identifying language from a selected language.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = "test_language_negotiation_method",
  *   weight = -10,
  *   name = @Translation("Test"),
diff --git a/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTestTs.php b/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTestTs.php
index cef125c804b8..b1f463c3e07b 100644
--- a/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTestTs.php
+++ b/core/modules/language/tests/language_test/src/Plugin/LanguageNegotiation/LanguageNegotiationTestTs.php
@@ -12,7 +12,7 @@
 /**
  * Class for identifying language from a selected language.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = "test_language_negotiation_method_ts",
  *   weight = -10,
  *   name = @Translation("Type-specific test"),
diff --git a/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUser.php b/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUser.php
index 623dac6dc3cf..e609c39a8548 100644
--- a/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUser.php
+++ b/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUser.php
@@ -13,7 +13,7 @@
 /**
  * Class for identifying language from the user preferences.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = \Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUser::METHOD_ID,
  *   weight = -4,
  *   name = @Translation("User"),
diff --git a/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php b/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php
index 2f27bf895c66..b95307234ac8 100644
--- a/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php
+++ b/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php
@@ -23,7 +23,7 @@
 /**
  * Identifies admin language from the user preferences.
  *
- * @Plugin(
+ * @LanguageNegotiation(
  *   id = Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin::METHOD_ID,
  *   types = {Drupal\Core\Language\LanguageInterface::TYPE_INTERFACE},
  *   weight = -10,
-- 
GitLab