Chris@17
|
1 <?php declare(strict_types=1);
|
Chris@17
|
2
|
Chris@17
|
3 namespace PhpParser\Builder;
|
Chris@17
|
4
|
Chris@17
|
5 use PhpParser\Builder;
|
Chris@17
|
6 use PhpParser\BuilderHelpers;
|
Chris@17
|
7 use PhpParser\Node;
|
Chris@17
|
8 use PhpParser\Node\Stmt;
|
Chris@17
|
9
|
Chris@17
|
10 class TraitUse implements Builder
|
Chris@17
|
11 {
|
Chris@17
|
12 protected $traits = [];
|
Chris@17
|
13 protected $adaptations = [];
|
Chris@17
|
14
|
Chris@17
|
15 /**
|
Chris@17
|
16 * Creates a trait use builder.
|
Chris@17
|
17 *
|
Chris@17
|
18 * @param Node\Name|string ...$traits Names of used traits
|
Chris@17
|
19 */
|
Chris@17
|
20 public function __construct(...$traits) {
|
Chris@17
|
21 foreach ($traits as $trait) {
|
Chris@17
|
22 $this->and($trait);
|
Chris@17
|
23 }
|
Chris@17
|
24 }
|
Chris@17
|
25
|
Chris@17
|
26 /**
|
Chris@17
|
27 * Adds used trait.
|
Chris@17
|
28 *
|
Chris@17
|
29 * @param Node\Name|string $trait Trait name
|
Chris@17
|
30 *
|
Chris@17
|
31 * @return $this The builder instance (for fluid interface)
|
Chris@17
|
32 */
|
Chris@17
|
33 public function and($trait) {
|
Chris@17
|
34 $this->traits[] = BuilderHelpers::normalizeName($trait);
|
Chris@17
|
35 return $this;
|
Chris@17
|
36 }
|
Chris@17
|
37
|
Chris@17
|
38 /**
|
Chris@17
|
39 * Adds trait adaptation.
|
Chris@17
|
40 *
|
Chris@17
|
41 * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation
|
Chris@17
|
42 *
|
Chris@17
|
43 * @return $this The builder instance (for fluid interface)
|
Chris@17
|
44 */
|
Chris@17
|
45 public function with($adaptation) {
|
Chris@17
|
46 $adaptation = BuilderHelpers::normalizeNode($adaptation);
|
Chris@17
|
47
|
Chris@17
|
48 if (!$adaptation instanceof Stmt\TraitUseAdaptation) {
|
Chris@17
|
49 throw new \LogicException('Adaptation must have type TraitUseAdaptation');
|
Chris@17
|
50 }
|
Chris@17
|
51
|
Chris@17
|
52 $this->adaptations[] = $adaptation;
|
Chris@17
|
53 return $this;
|
Chris@17
|
54 }
|
Chris@17
|
55
|
Chris@17
|
56 /**
|
Chris@17
|
57 * Returns the built node.
|
Chris@17
|
58 *
|
Chris@17
|
59 * @return Node The built node
|
Chris@17
|
60 */
|
Chris@17
|
61 public function getNode() : Node {
|
Chris@17
|
62 return new Stmt\TraitUse($this->traits, $this->adaptations);
|
Chris@17
|
63 }
|
Chris@17
|
64 }
|