Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Annotations\Annotation; Chris@0: Chris@0: /** Chris@0: * Annotation that can be used to signal to the parser Chris@0: * to check the annotation target during the parsing process. Chris@0: * Chris@0: * @author Fabio B. Silva Chris@0: * Chris@0: * @Annotation Chris@0: */ Chris@0: final class Target Chris@0: { Chris@0: const TARGET_CLASS = 1; Chris@0: const TARGET_METHOD = 2; Chris@0: const TARGET_PROPERTY = 4; Chris@0: const TARGET_ANNOTATION = 8; Chris@0: const TARGET_ALL = 15; Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: private static $map = array( Chris@0: 'ALL' => self::TARGET_ALL, Chris@0: 'CLASS' => self::TARGET_CLASS, Chris@0: 'METHOD' => self::TARGET_METHOD, Chris@0: 'PROPERTY' => self::TARGET_PROPERTY, Chris@0: 'ANNOTATION' => self::TARGET_ANNOTATION, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: public $value; Chris@0: Chris@0: /** Chris@0: * Targets as bitmask. Chris@0: * Chris@0: * @var integer Chris@0: */ Chris@0: public $targets; Chris@0: Chris@0: /** Chris@0: * Literal target declaration. Chris@0: * Chris@0: * @var integer Chris@0: */ Chris@0: public $literal; Chris@0: Chris@0: /** Chris@0: * Annotation constructor. Chris@0: * Chris@0: * @param array $values Chris@0: * Chris@0: * @throws \InvalidArgumentException Chris@0: */ Chris@0: public function __construct(array $values) Chris@0: { Chris@0: if (!isset($values['value'])){ Chris@0: $values['value'] = null; Chris@0: } Chris@0: if (is_string($values['value'])){ Chris@0: $values['value'] = array($values['value']); Chris@0: } Chris@0: if (!is_array($values['value'])){ Chris@0: throw new \InvalidArgumentException( Chris@0: sprintf('@Target expects either a string value, or an array of strings, "%s" given.', Chris@0: is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) Chris@0: ) Chris@0: ); Chris@0: } Chris@0: Chris@0: $bitmask = 0; Chris@0: foreach ($values['value'] as $literal) { Chris@0: if(!isset(self::$map[$literal])){ Chris@0: throw new \InvalidArgumentException( Chris@0: sprintf('Invalid Target "%s". Available targets: [%s]', Chris@0: $literal, implode(', ', array_keys(self::$map))) Chris@0: ); Chris@0: } Chris@0: $bitmask |= self::$map[$literal]; Chris@0: } Chris@0: Chris@0: $this->targets = $bitmask; Chris@0: $this->value = $values['value']; Chris@0: $this->literal = implode(', ', $this->value); Chris@0: } Chris@0: }