setIdentifiers([ __CLASS__, get_class($this), ]); $this->events = $events; return $this; } /** * Retrieve event manager * * Lazy loads an instance if none registered. * * @return EventManagerInterface */ public function getEventManager() { if (null === $this->events) { $this->setEventManager(new EventManager()); } return $this->events; } /** * Attach a parser to listen to the createAnnotation event * * @param ParserInterface $parser * @return AnnotationManager */ public function attach(ParserInterface $parser) { $this->getEventManager() ->attach(self::EVENT_CREATE_ANNOTATION, [$parser, 'onCreateAnnotation']); return $this; } /** * Create Annotation * * @param string[] $annotationData * @return false|\stdClass */ public function createAnnotation(array $annotationData) { $event = new Event(); $event->setName(self::EVENT_CREATE_ANNOTATION); $event->setTarget($this); $event->setParams([ 'class' => $annotationData[0], 'content' => $annotationData[1], 'raw' => $annotationData[2], ]); $eventManager = $this->getEventManager(); $results = $eventManager->triggerEventUntil(function ($r) { return is_object($r); }, $event); $annotation = $results->last(); return is_object($annotation) ? $annotation : false; } }