Source of file MethodObject.php
Size: 6,726 Bytes - Last Modified: 2014-09-10T12:24:22+02:00
/home/theseer/storage/php/phpdox/src/collector/project/MethodObject.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | <?php /** * Copyright (c) 2010-2014 Arne Blankerts <arne@blankerts.de> * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of Arne Blankerts nor the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER ORCONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package phpDox * @author Arne Blankerts <arne@blankerts.de> * @copyright Arne Blankerts <arne@blankerts.de>, All rights reserved. * @license BSD License */ namespace TheSeer\phpDox\Collector { use TheSeer\fDOM\fDOMElement; use TheSeer\phpDox\DocBlock\DocBlock; /** * */ class MethodObject { const XMLNS = 'http://xml.phpdox.net/src'; /** * @var \TheSeer\fDOM\fDOMElement */ private $ctx; /** * @var AbstractUnitObject */ private $unit; /** * @param AbstractUnitObject $unit * @param fDOMElement $ctx */ public function __construct(AbstractUnitObject $unit, fDOMElement $ctx) { $this->unit = $unit; $this->ctx = $ctx; } public function getOwner() { return $this->unit; } public function export() { return $this->ctx; } /** * @param string $name */ public function setName($name) { $this->ctx->setAttribute('name', $name); } public function getName() { return $this->ctx->getAttribute('name'); } /** * @param int $startLine */ public function setStartLine($startLine) { $this->ctx->setAttribute('start', $startLine); } /** * @param int $endLine */ public function setEndLine($endLine) { $this->ctx->setAttribute('end', $endLine); } /** * @param boolean $isFinal */ public function setFinal($isFinal) { $this->ctx->setAttribute('final', $isFinal ? 'true' : 'false'); } /** * @param boolean $isAbstract */ public function setAbstract($isAbstract) { $this->ctx->setAttribute('abstract', $isAbstract ? 'true' : 'false'); } /** * @param boolean $isStatic */ public function setStatic($isStatic) { $this->ctx->setAttribute('static', $isStatic ? 'true' : 'false'); } /** * @param string $visibility */ public function setVisibility($visibility) { if (!in_array($visibility, array('public','private','protected'))) { throw new MethodObjectException("'$visibility' is not valid'", MethodObjectException::InvalidVisibility); } $this->ctx->setAttribute('visibility', $visibility); } /** * @param DocBlock $docblock */ public function setDocBlock(DocBlock $docblock) { $docNode = $docblock->asDom($this->ctx->ownerDocument); if ($this->ctx->hasChildNodes()) { $this->ctx->insertBefore($docNode, $this->ctx->firstChild); return; } $this->ctx->appendChild($docNode); } public function hasInheritDoc() { return $this->ctx->query('phpdox:docblock[@inherit="true"]')->length > 0; } public function inhertDocBlock(MethodObject $method) { $inherit = $method->export()->queryOne('phpdox:docblock'); if (!$inherit) { // no docblock, no work ;) return; } $docNode = $this->ctx->queryOne('phpdox:docblock'); if (!$docNode) { $this->setDocBlock(new DocBlock()); $docNode = $this->ctx->queryOne('phpdox:docblock'); } $container = $docNode->appendElementNS(self::XMLNS, 'inherited'); $container->setAttribute( $method->getOwner()->getType(), $method->getOwner()->getName() ); $container->appendChild($this->ctx->ownerDocument->importNode($inherit, true)); } /** * @param string $name * * @return ParameterObject */ public function addParameter($name) { $parameter = new ParameterObject($this->ctx->appendElementNS(self::XMLNS, 'parameter')); $parameter->setName($name); return $parameter; } /** * @param InlineComment $InlineComment */ public function addInlineComment(InlineComment $InlineComment) { $this->getInlineContainer()->appendChild( $InlineComment->asDom($this->ctx->ownerDocument) ); } /** * @return fDOMElement */ private function getInlineContainer() { $node = $this->ctx->queryOne('phpdox:inline'); if ($node !== NULL) { return $node; } return $this->ctx->appendElementNS(self::XMLNS, 'inline'); } } class MethodObjectException extends \Exception { const InvalidVisibility = 1; } } |