comparison core/lib/Drupal/Component/Annotation/Plugin.php @ 0:4c8ae668cc8c

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