126 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | namespace PhpParser\Builder; | ||
|  | 
 | ||
|  | use PhpParser; | ||
|  | use PhpParser\Node; | ||
|  | use PhpParser\Node\Stmt; | ||
|  | 
 | ||
|  | class Method extends FunctionLike | ||
|  | { | ||
|  |     protected $name; | ||
|  |     protected $type = 0; | ||
|  |     protected $stmts = array(); | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Creates a method builder. | ||
|  |      * | ||
|  |      * @param string $name Name of the method | ||
|  |      */ | ||
|  |     public function __construct($name) { | ||
|  |         $this->name = $name; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method public. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makePublic() { | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method protected. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makeProtected() { | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method private. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makePrivate() { | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method static. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makeStatic() { | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_STATIC); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method abstract. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makeAbstract() { | ||
|  |         if (!empty($this->stmts)) { | ||
|  |             throw new \LogicException('Cannot make method with statements abstract'); | ||
|  |         } | ||
|  | 
 | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_ABSTRACT); | ||
|  |         $this->stmts = null; // abstract methods don't have statements
 | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Makes the method final. | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function makeFinal() { | ||
|  |         $this->setModifier(Stmt\Class_::MODIFIER_FINAL); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Adds a statement. | ||
|  |      * | ||
|  |      * @param Node|PhpParser\Builder $stmt The statement to add | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function addStmt($stmt) { | ||
|  |         if (null === $this->stmts) { | ||
|  |             throw new \LogicException('Cannot add statements to an abstract method'); | ||
|  |         } | ||
|  | 
 | ||
|  |         $this->stmts[] = $this->normalizeNode($stmt); | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns the built method node. | ||
|  |      * | ||
|  |      * @return Stmt\ClassMethod The built method node | ||
|  |      */ | ||
|  |     public function getNode() { | ||
|  |         return new Stmt\ClassMethod($this->name, array( | ||
|  |             'type'   => $this->type, | ||
|  |             'byRef'  => $this->returnByRef, | ||
|  |             'params' => $this->params, | ||
|  |             'stmts'  => $this->stmts, | ||
|  |         ), $this->attributes); | ||
|  |     } | ||
|  | } |