Mercurial > hg > isophonics-drupal-site
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Component/Annotation/Plugin.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,112 @@ +<?php + +namespace Drupal\Component\Annotation; + +use Drupal\Component\Utility\NestedArray; + +/** + * Defines a Plugin annotation object. + * + * Annotations in plugin classes can use this class in order to pass various + * metadata about the plugin through the parser to + * DiscoveryInterface::getDefinitions() calls. This allows the metadata + * of a class to be located with the class itself, rather than in module-based + * info hooks. + * + * @ingroup plugin_api + * + * @Annotation + */ +class Plugin implements AnnotationInterface { + + /** + * The plugin definition read from the class annotation. + * + * @var array + */ + protected $definition; + + /** + * Constructs a Plugin object. + * + * Builds up the plugin definition and invokes the get() method for any + * classed annotations that were used. + */ + public function __construct($values) { + $reflection = new \ReflectionClass($this); + // Only keep actual default values by ignoring NULL values. + $defaults = array_filter($reflection->getDefaultProperties(), function ($value) { + return $value !== NULL; + }); + $parsed_values = $this->parse($values); + $this->definition = NestedArray::mergeDeep($defaults, $parsed_values); + } + + /** + * Parses an annotation into its definition. + * + * @param array $values + * The annotation array. + * + * @return array + * The parsed annotation as a definition. + */ + protected function parse(array $values) { + $definitions = []; + foreach ($values as $key => $value) { + if ($value instanceof AnnotationInterface) { + $definitions[$key] = $value->get(); + } + elseif (is_array($value)) { + $definitions[$key] = $this->parse($value); + } + else { + $definitions[$key] = $value; + } + } + return $definitions; + } + + /** + * {@inheritdoc} + */ + public function get() { + return $this->definition; + } + + /** + * {@inheritdoc} + */ + public function getProvider() { + return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE; + } + + /** + * {@inheritdoc} + */ + public function setProvider($provider) { + $this->definition['provider'] = $provider; + } + + /** + * {@inheritdoc} + */ + public function getId() { + return $this->definition['id']; + } + + /** + * {@inheritdoc} + */ + public function getClass() { + return $this->definition['class']; + } + + /** + * {@inheritdoc} + */ + public function setClass($class) { + $this->definition['class'] = $class; + } + +}