1 <?php declare(strict_types=1);
3 namespace PhpParser\Builder;
6 use PhpParser\BuilderHelpers;
8 use PhpParser\Node\Stmt;
10 class TraitUse implements Builder
12 protected $traits = [];
13 protected $adaptations = [];
16 * Creates a trait use builder.
18 * @param Node\Name|string ...$traits Names of used traits
20 public function __construct(...$traits) {
21 foreach ($traits as $trait) {
29 * @param Node\Name|string $trait Trait name
31 * @return $this The builder instance (for fluid interface)
33 public function and($trait) {
34 $this->traits[] = BuilderHelpers::normalizeName($trait);
39 * Adds trait adaptation.
41 * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation
43 * @return $this The builder instance (for fluid interface)
45 public function with($adaptation) {
46 $adaptation = BuilderHelpers::normalizeNode($adaptation);
48 if (!$adaptation instanceof Stmt\TraitUseAdaptation) {
49 throw new \LogicException('Adaptation must have type TraitUseAdaptation');
52 $this->adaptations[] = $adaptation;
57 * Returns the built node.
59 * @return Node The built node
61 public function getNode() : Node {
62 return new Stmt\TraitUse($this->traits, $this->adaptations);