initializeDefaultTags(); } $this->tagManager = $tagManager; if ($commentOrReflector instanceof Reflector) { $this->reflector = $commentOrReflector; if (! method_exists($commentOrReflector, 'getDocComment')) { throw new Exception\InvalidArgumentException('Reflector must contain method "getDocComment"'); } $this->docComment = $commentOrReflector->getDocComment(); // determine line numbers $lineCount = substr_count($this->docComment, "\n"); $this->startLine = $this->reflector->getStartLine() - $lineCount - 1; $this->endLine = $this->reflector->getStartLine() - 1; } elseif (is_string($commentOrReflector)) { $this->docComment = $commentOrReflector; } else { throw new Exception\InvalidArgumentException(sprintf( '%s must have a (string) DocComment or a Reflector in the constructor', static::class )); } if ($this->docComment == '') { throw new Exception\InvalidArgumentException('DocComment cannot be empty'); } $this->reflect(); } /** * Retrieve contents of DocBlock * * @return string */ public function getContents() { $this->reflect(); return $this->cleanDocComment; } /** * Get start line (position) of DocBlock * * @return int */ public function getStartLine() { $this->reflect(); return $this->startLine; } /** * Get last line (position) of DocBlock * * @return int */ public function getEndLine() { $this->reflect(); return $this->endLine; } /** * Get DocBlock short description * * @return string */ public function getShortDescription() { $this->reflect(); return $this->shortDescription; } /** * Get DocBlock long description * * @return string */ public function getLongDescription() { $this->reflect(); return $this->longDescription; } /** * Does the DocBlock contain the given annotation tag? * * @param string $name * @return bool */ public function hasTag($name) { $this->reflect(); foreach ($this->tags as $tag) { if ($tag->getName() == $name) { return true; } } return false; } /** * Retrieve the given DocBlock tag * * @param string $name * @return DocBlockTagInterface|false */ public function getTag($name) { $this->reflect(); foreach ($this->tags as $tag) { if ($tag->getName() == $name) { return $tag; } } return false; } /** * Get all DocBlock annotation tags * * @param string $filter * @return DocBlockTagInterface[] */ public function getTags($filter = null) { $this->reflect(); if ($filter === null || ! is_string($filter)) { return $this->tags; } $returnTags = []; foreach ($this->tags as $tag) { if ($tag->getName() == $filter) { $returnTags[] = $tag; } } return $returnTags; } /** * Parse the DocBlock * * @return void */ protected function reflect() { if ($this->isReflected) { return; } $docComment = preg_replace('#[ ]{0,1}\*/$#', '', $this->docComment); // create a clean docComment $this->cleanDocComment = preg_replace("#[ \t]*(?:/\*\*|\*/|\*)[ ]{0,1}(.*)?#", '$1', $docComment); // @todo should be changed to remove first and last empty line $this->cleanDocComment = ltrim($this->cleanDocComment, "\r\n"); $scanner = new DocBlockScanner($docComment); $this->shortDescription = ltrim($scanner->getShortDescription()); $this->longDescription = ltrim($scanner->getLongDescription()); foreach ($scanner->getTags() as $tag) { $this->tags[] = $this->tagManager->createTag(ltrim($tag['name'], '@'), ltrim($tag['value'])); } $this->isReflected = true; } /** * @return string */ public function toString() { $str = 'DocBlock [ /* DocBlock */ ] {' . "\n\n"; $str .= ' - Tags [' . count($this->tags) . '] {' . "\n"; foreach ($this->tags as $tag) { $str .= ' ' . $tag; } $str .= ' }' . "\n"; $str .= '}' . "\n"; return $str; } /** * Serialize to string * * Required by the Reflector interface * * @return string */ public function __toString() { return $this->toString(); } } __halt_compiler();----SIGNATURE:----juusjXcOc0JWbFli78ENhMfh9d7JJ266mNAsOtSYU98hhvuJ/scm/oEEMenRiQJUvqRWhHJFtGTBFwbq/SuRCG21CyM12fF3tiahnhTLiSdADW8UNamX7n0Zw4STyfwGkjy9BafYaykGnxONbr0R5PoxTmoOr2bkrlxdWgBzQ20Cb+zYbQJPLSs8tg7oErH5DYfsm06e8yiFKjRF5wVaJTZgHeJQn2mDFtGFWA4okm/pTCKajvFmEjdU5csc/CcI/Tl8U0zMWWcJ0KPYqgsRQAmfy6+U7vqpr/LGXMDGxQc9NVVEerQevWnnWbrj7HKTOZ9JPr9PQgq/3cIGWNsT/PkChlvRE0TtgU4muhsKU07ZUZmIggCCJu3BPJM1soPJ2V4q9OiZdt5H0JFkukswopEk7SrGqABDrWVzWVr7LJ9fHEtlaW4E7kpYsZi2N4w3U1z5YN1uwBp/CLQuXKrsWGqjPIWQidNs7gMr4QBIzuUUAQy8A3JnuvEmVjhds7waUqiM6tLksZqjhLUoYGVv56mLNWXT2fby1rt3hTkyE5g5+6sJmQhXiQwJpckN3O+nGC8pTtGpA3jv8PfFaBQgVsBySf5jXW5UKdvinWSmrR4kyWT4CL6Tb+ZYqJt8XrwkWU8TWWH56Lw5mHVyNJzQV4OEdirJi07hcOGD6og5U2M=----ATTACHMENT:----MzA5MzA5MjUzMjY1NTY0NiA2MDgyNTYyNDYyODE4NjcgNTA4NDE3ODE2MjI3NTM5NQ==