Mercurial > hg > isophonics-drupal-site
comparison vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php declare(strict_types=1); | |
2 | |
3 namespace PhpParser\Builder; | |
4 | |
5 use PhpParser\Builder; | |
6 use PhpParser\BuilderHelpers; | |
7 use PhpParser\Node; | |
8 use PhpParser\Node\Stmt; | |
9 | |
10 class TraitUseAdaptation implements Builder | |
11 { | |
12 const TYPE_UNDEFINED = 0; | |
13 const TYPE_ALIAS = 1; | |
14 const TYPE_PRECEDENCE = 2; | |
15 | |
16 /** @var int Type of building adaptation */ | |
17 protected $type; | |
18 | |
19 protected $trait; | |
20 protected $method; | |
21 | |
22 protected $modifier = null; | |
23 protected $alias = null; | |
24 | |
25 protected $insteadof = []; | |
26 | |
27 /** | |
28 * Creates a trait use adaptation builder. | |
29 * | |
30 * @param Node\Name|string|null $trait Name of adaptated trait | |
31 * @param Node\Identifier|string $method Name of adaptated method | |
32 */ | |
33 public function __construct($trait, $method) { | |
34 $this->type = self::TYPE_UNDEFINED; | |
35 | |
36 $this->trait = is_null($trait)? null: BuilderHelpers::normalizeName($trait); | |
37 $this->method = BuilderHelpers::normalizeIdentifier($method); | |
38 } | |
39 | |
40 /** | |
41 * Sets alias of method. | |
42 * | |
43 * @param Node\Identifier|string $alias Alias for adaptated method | |
44 * | |
45 * @return $this The builder instance (for fluid interface) | |
46 */ | |
47 public function as($alias) { | |
48 if ($this->type === self::TYPE_UNDEFINED) { | |
49 $this->type = self::TYPE_ALIAS; | |
50 } | |
51 | |
52 if ($this->type !== self::TYPE_ALIAS) { | |
53 throw new \LogicException('Cannot set alias for not alias adaptation buider'); | |
54 } | |
55 | |
56 $this->alias = $alias; | |
57 return $this; | |
58 } | |
59 | |
60 /** | |
61 * Sets adaptated method public. | |
62 * | |
63 * @return $this The builder instance (for fluid interface) | |
64 */ | |
65 public function makePublic() { | |
66 $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC); | |
67 return $this; | |
68 } | |
69 | |
70 /** | |
71 * Sets adaptated method protected. | |
72 * | |
73 * @return $this The builder instance (for fluid interface) | |
74 */ | |
75 public function makeProtected() { | |
76 $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED); | |
77 return $this; | |
78 } | |
79 | |
80 /** | |
81 * Sets adaptated method private. | |
82 * | |
83 * @return $this The builder instance (for fluid interface) | |
84 */ | |
85 public function makePrivate() { | |
86 $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE); | |
87 return $this; | |
88 } | |
89 | |
90 /** | |
91 * Adds overwritten traits. | |
92 * | |
93 * @param Node\Name|string ...$traits Traits for overwrite | |
94 * | |
95 * @return $this The builder instance (for fluid interface) | |
96 */ | |
97 public function insteadof(...$traits) { | |
98 if ($this->type === self::TYPE_UNDEFINED) { | |
99 if (is_null($this->trait)) { | |
100 throw new \LogicException('Precedence adaptation must have trait'); | |
101 } | |
102 | |
103 $this->type = self::TYPE_PRECEDENCE; | |
104 } | |
105 | |
106 if ($this->type !== self::TYPE_PRECEDENCE) { | |
107 throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider'); | |
108 } | |
109 | |
110 foreach ($traits as $trait) { | |
111 $this->insteadof[] = BuilderHelpers::normalizeName($trait); | |
112 } | |
113 | |
114 return $this; | |
115 } | |
116 | |
117 protected function setModifier(int $modifier) { | |
118 if ($this->type === self::TYPE_UNDEFINED) { | |
119 $this->type = self::TYPE_ALIAS; | |
120 } | |
121 | |
122 if ($this->type !== self::TYPE_ALIAS) { | |
123 throw new \LogicException('Cannot set access modifier for not alias adaptation buider'); | |
124 } | |
125 | |
126 if (is_null($this->modifier)) { | |
127 $this->modifier = $modifier; | |
128 } else { | |
129 throw new \LogicException('Multiple access type modifiers are not allowed'); | |
130 } | |
131 } | |
132 | |
133 /** | |
134 * Returns the built node. | |
135 * | |
136 * @return Node The built node | |
137 */ | |
138 public function getNode() : Node { | |
139 switch ($this->type) { | |
140 case self::TYPE_ALIAS: | |
141 return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias); | |
142 case self::TYPE_PRECEDENCE: | |
143 return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof); | |
144 default: | |
145 throw new \LogicException('Type of adaptation is not defined'); | |
146 } | |
147 } | |
148 } |