65 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php declare(strict_types=1); | ||
|  | 
 | ||
|  | namespace PhpParser\Builder; | ||
|  | 
 | ||
|  | use PhpParser\Builder; | ||
|  | use PhpParser\BuilderHelpers; | ||
|  | use PhpParser\Node; | ||
|  | use PhpParser\Node\Stmt; | ||
|  | 
 | ||
|  | class TraitUse implements Builder | ||
|  | { | ||
|  |     protected $traits = []; | ||
|  |     protected $adaptations = []; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Creates a trait use builder. | ||
|  |      * | ||
|  |      * @param Node\Name|string ...$traits Names of used traits | ||
|  |      */ | ||
|  |     public function __construct(...$traits) { | ||
|  |         foreach ($traits as $trait) { | ||
|  |             $this->and($trait); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Adds used trait. | ||
|  |      * | ||
|  |      * @param Node\Name|string $trait Trait name | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function and($trait) { | ||
|  |         $this->traits[] = BuilderHelpers::normalizeName($trait); | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Adds trait adaptation. | ||
|  |      * | ||
|  |      * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation | ||
|  |      * | ||
|  |      * @return $this The builder instance (for fluid interface) | ||
|  |      */ | ||
|  |     public function with($adaptation) { | ||
|  |         $adaptation = BuilderHelpers::normalizeNode($adaptation); | ||
|  | 
 | ||
|  |         if (!$adaptation instanceof Stmt\TraitUseAdaptation) { | ||
|  |             throw new \LogicException('Adaptation must have type TraitUseAdaptation'); | ||
|  |         } | ||
|  | 
 | ||
|  |         $this->adaptations[] = $adaptation; | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns the built node. | ||
|  |      * | ||
|  |      * @return Node The built node | ||
|  |      */ | ||
|  |     public function getNode() : Node { | ||
|  |         return new Stmt\TraitUse($this->traits, $this->adaptations); | ||
|  |     } | ||
|  | } |