annotate core/lib/Drupal/Component/Annotation/Plugin.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Component\Annotation;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\NestedArray;
Chris@0 6
Chris@0 7 /**
Chris@0 8 * Defines a Plugin annotation object.
Chris@0 9 *
Chris@0 10 * Annotations in plugin classes can use this class in order to pass various
Chris@0 11 * metadata about the plugin through the parser to
Chris@0 12 * DiscoveryInterface::getDefinitions() calls. This allows the metadata
Chris@0 13 * of a class to be located with the class itself, rather than in module-based
Chris@0 14 * info hooks.
Chris@0 15 *
Chris@0 16 * @ingroup plugin_api
Chris@0 17 *
Chris@0 18 * @Annotation
Chris@0 19 */
Chris@0 20 class Plugin implements AnnotationInterface {
Chris@0 21
Chris@0 22 /**
Chris@0 23 * The plugin definition read from the class annotation.
Chris@0 24 *
Chris@0 25 * @var array
Chris@0 26 */
Chris@0 27 protected $definition;
Chris@0 28
Chris@0 29 /**
Chris@0 30 * Constructs a Plugin object.
Chris@0 31 *
Chris@0 32 * Builds up the plugin definition and invokes the get() method for any
Chris@0 33 * classed annotations that were used.
Chris@0 34 */
Chris@0 35 public function __construct($values) {
Chris@0 36 $reflection = new \ReflectionClass($this);
Chris@0 37 // Only keep actual default values by ignoring NULL values.
Chris@0 38 $defaults = array_filter($reflection->getDefaultProperties(), function ($value) {
Chris@0 39 return $value !== NULL;
Chris@0 40 });
Chris@0 41 $parsed_values = $this->parse($values);
Chris@0 42 $this->definition = NestedArray::mergeDeep($defaults, $parsed_values);
Chris@0 43 }
Chris@0 44
Chris@0 45 /**
Chris@0 46 * Parses an annotation into its definition.
Chris@0 47 *
Chris@0 48 * @param array $values
Chris@0 49 * The annotation array.
Chris@0 50 *
Chris@0 51 * @return array
Chris@0 52 * The parsed annotation as a definition.
Chris@0 53 */
Chris@0 54 protected function parse(array $values) {
Chris@0 55 $definitions = [];
Chris@0 56 foreach ($values as $key => $value) {
Chris@0 57 if ($value instanceof AnnotationInterface) {
Chris@0 58 $definitions[$key] = $value->get();
Chris@0 59 }
Chris@0 60 elseif (is_array($value)) {
Chris@0 61 $definitions[$key] = $this->parse($value);
Chris@0 62 }
Chris@0 63 else {
Chris@0 64 $definitions[$key] = $value;
Chris@0 65 }
Chris@0 66 }
Chris@0 67 return $definitions;
Chris@0 68 }
Chris@0 69
Chris@0 70 /**
Chris@0 71 * {@inheritdoc}
Chris@0 72 */
Chris@0 73 public function get() {
Chris@0 74 return $this->definition;
Chris@0 75 }
Chris@0 76
Chris@0 77 /**
Chris@0 78 * {@inheritdoc}
Chris@0 79 */
Chris@0 80 public function getProvider() {
Chris@0 81 return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE;
Chris@0 82 }
Chris@0 83
Chris@0 84 /**
Chris@0 85 * {@inheritdoc}
Chris@0 86 */
Chris@0 87 public function setProvider($provider) {
Chris@0 88 $this->definition['provider'] = $provider;
Chris@0 89 }
Chris@0 90
Chris@0 91 /**
Chris@0 92 * {@inheritdoc}
Chris@0 93 */
Chris@0 94 public function getId() {
Chris@0 95 return $this->definition['id'];
Chris@0 96 }
Chris@0 97
Chris@0 98 /**
Chris@0 99 * {@inheritdoc}
Chris@0 100 */
Chris@0 101 public function getClass() {
Chris@0 102 return $this->definition['class'];
Chris@0 103 }
Chris@0 104
Chris@0 105 /**
Chris@0 106 * {@inheritdoc}
Chris@0 107 */
Chris@0 108 public function setClass($class) {
Chris@0 109 $this->definition['class'] = $class;
Chris@0 110 }
Chris@0 111
Chris@0 112 }