Chris@0: getDefaultProperties(), function ($value) { Chris@0: return $value !== NULL; Chris@0: }); Chris@0: $parsed_values = $this->parse($values); Chris@0: $this->definition = NestedArray::mergeDeep($defaults, $parsed_values); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Parses an annotation into its definition. Chris@0: * Chris@0: * @param array $values Chris@0: * The annotation array. Chris@0: * Chris@0: * @return array Chris@0: * The parsed annotation as a definition. Chris@0: */ Chris@0: protected function parse(array $values) { Chris@0: $definitions = []; Chris@0: foreach ($values as $key => $value) { Chris@0: if ($value instanceof AnnotationInterface) { Chris@0: $definitions[$key] = $value->get(); Chris@0: } Chris@0: elseif (is_array($value)) { Chris@0: $definitions[$key] = $this->parse($value); Chris@0: } Chris@0: else { Chris@0: $definitions[$key] = $value; Chris@0: } Chris@0: } Chris@0: return $definitions; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function get() { Chris@0: return $this->definition; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getProvider() { Chris@0: return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setProvider($provider) { Chris@0: $this->definition['provider'] = $provider; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getId() { Chris@0: return $this->definition['id']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getClass() { Chris@0: return $this->definition['class']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setClass($class) { Chris@0: $this->definition['class'] = $class; Chris@0: } Chris@0: Chris@0: }