Mercurial > hg > cmmr2012-drupal-site
comparison vendor/phpdocumentor/reflection-docblock/src/DocBlock.php @ 2:5311817fb629
Theme updates
author | Chris Cannam |
---|---|
date | Tue, 10 Jul 2018 13:19:18 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:0b0e5f3b1e83 | 2:5311817fb629 |
---|---|
1 <?php | |
2 /** | |
3 * This file is part of phpDocumentor. | |
4 * | |
5 * For the full copyright and license information, please view the LICENSE | |
6 * file that was distributed with this source code. | |
7 * | |
8 * @copyright 2010-2015 Mike van Riel<mike@phpdoc.org> | |
9 * @license http://www.opensource.org/licenses/mit-license.php MIT | |
10 * @link http://phpdoc.org | |
11 */ | |
12 | |
13 namespace phpDocumentor\Reflection; | |
14 | |
15 use phpDocumentor\Reflection\DocBlock\Tag; | |
16 use Webmozart\Assert\Assert; | |
17 | |
18 final class DocBlock | |
19 { | |
20 /** @var string The opening line for this docblock. */ | |
21 private $summary = ''; | |
22 | |
23 /** @var DocBlock\Description The actual description for this docblock. */ | |
24 private $description = null; | |
25 | |
26 /** @var Tag[] An array containing all the tags in this docblock; except inline. */ | |
27 private $tags = []; | |
28 | |
29 /** @var Types\Context Information about the context of this DocBlock. */ | |
30 private $context = null; | |
31 | |
32 /** @var Location Information about the location of this DocBlock. */ | |
33 private $location = null; | |
34 | |
35 /** @var bool Is this DocBlock (the start of) a template? */ | |
36 private $isTemplateStart = false; | |
37 | |
38 /** @var bool Does this DocBlock signify the end of a DocBlock template? */ | |
39 private $isTemplateEnd = false; | |
40 | |
41 /** | |
42 * @param string $summary | |
43 * @param DocBlock\Description $description | |
44 * @param DocBlock\Tag[] $tags | |
45 * @param Types\Context $context The context in which the DocBlock occurs. | |
46 * @param Location $location The location within the file that this DocBlock occurs in. | |
47 * @param bool $isTemplateStart | |
48 * @param bool $isTemplateEnd | |
49 */ | |
50 public function __construct( | |
51 $summary = '', | |
52 DocBlock\Description $description = null, | |
53 array $tags = [], | |
54 Types\Context $context = null, | |
55 Location $location = null, | |
56 $isTemplateStart = false, | |
57 $isTemplateEnd = false | |
58 ) { | |
59 Assert::string($summary); | |
60 Assert::boolean($isTemplateStart); | |
61 Assert::boolean($isTemplateEnd); | |
62 Assert::allIsInstanceOf($tags, Tag::class); | |
63 | |
64 $this->summary = $summary; | |
65 $this->description = $description ?: new DocBlock\Description(''); | |
66 foreach ($tags as $tag) { | |
67 $this->addTag($tag); | |
68 } | |
69 | |
70 $this->context = $context; | |
71 $this->location = $location; | |
72 | |
73 $this->isTemplateEnd = $isTemplateEnd; | |
74 $this->isTemplateStart = $isTemplateStart; | |
75 } | |
76 | |
77 /** | |
78 * @return string | |
79 */ | |
80 public function getSummary() | |
81 { | |
82 return $this->summary; | |
83 } | |
84 | |
85 /** | |
86 * @return DocBlock\Description | |
87 */ | |
88 public function getDescription() | |
89 { | |
90 return $this->description; | |
91 } | |
92 | |
93 /** | |
94 * Returns the current context. | |
95 * | |
96 * @return Types\Context | |
97 */ | |
98 public function getContext() | |
99 { | |
100 return $this->context; | |
101 } | |
102 | |
103 /** | |
104 * Returns the current location. | |
105 * | |
106 * @return Location | |
107 */ | |
108 public function getLocation() | |
109 { | |
110 return $this->location; | |
111 } | |
112 | |
113 /** | |
114 * Returns whether this DocBlock is the start of a Template section. | |
115 * | |
116 * A Docblock may serve as template for a series of subsequent DocBlocks. This is indicated by a special marker | |
117 * (`#@+`) that is appended directly after the opening `/**` of a DocBlock. | |
118 * | |
119 * An example of such an opening is: | |
120 * | |
121 * ``` | |
122 * /**#@+ | |
123 * * My DocBlock | |
124 * * / | |
125 * ``` | |
126 * | |
127 * The description and tags (not the summary!) are copied onto all subsequent DocBlocks and also applied to all | |
128 * elements that follow until another DocBlock is found that contains the closing marker (`#@-`). | |
129 * | |
130 * @see self::isTemplateEnd() for the check whether a closing marker was provided. | |
131 * | |
132 * @return boolean | |
133 */ | |
134 public function isTemplateStart() | |
135 { | |
136 return $this->isTemplateStart; | |
137 } | |
138 | |
139 /** | |
140 * Returns whether this DocBlock is the end of a Template section. | |
141 * | |
142 * @see self::isTemplateStart() for a more complete description of the Docblock Template functionality. | |
143 * | |
144 * @return boolean | |
145 */ | |
146 public function isTemplateEnd() | |
147 { | |
148 return $this->isTemplateEnd; | |
149 } | |
150 | |
151 /** | |
152 * Returns the tags for this DocBlock. | |
153 * | |
154 * @return Tag[] | |
155 */ | |
156 public function getTags() | |
157 { | |
158 return $this->tags; | |
159 } | |
160 | |
161 /** | |
162 * Returns an array of tags matching the given name. If no tags are found | |
163 * an empty array is returned. | |
164 * | |
165 * @param string $name String to search by. | |
166 * | |
167 * @return Tag[] | |
168 */ | |
169 public function getTagsByName($name) | |
170 { | |
171 Assert::string($name); | |
172 | |
173 $result = []; | |
174 | |
175 /** @var Tag $tag */ | |
176 foreach ($this->getTags() as $tag) { | |
177 if ($tag->getName() !== $name) { | |
178 continue; | |
179 } | |
180 | |
181 $result[] = $tag; | |
182 } | |
183 | |
184 return $result; | |
185 } | |
186 | |
187 /** | |
188 * Checks if a tag of a certain type is present in this DocBlock. | |
189 * | |
190 * @param string $name Tag name to check for. | |
191 * | |
192 * @return bool | |
193 */ | |
194 public function hasTag($name) | |
195 { | |
196 Assert::string($name); | |
197 | |
198 /** @var Tag $tag */ | |
199 foreach ($this->getTags() as $tag) { | |
200 if ($tag->getName() === $name) { | |
201 return true; | |
202 } | |
203 } | |
204 | |
205 return false; | |
206 } | |
207 | |
208 /** | |
209 * Remove a tag from this DocBlock. | |
210 * | |
211 * @param Tag $tag The tag to remove. | |
212 * | |
213 * @return void | |
214 */ | |
215 public function removeTag(Tag $tagToRemove) | |
216 { | |
217 foreach ($this->tags as $key => $tag) { | |
218 if ($tag === $tagToRemove) { | |
219 unset($this->tags[$key]); | |
220 break; | |
221 } | |
222 } | |
223 } | |
224 | |
225 /** | |
226 * Adds a tag to this DocBlock. | |
227 * | |
228 * @param Tag $tag The tag to add. | |
229 * | |
230 * @return void | |
231 */ | |
232 private function addTag(Tag $tag) | |
233 { | |
234 $this->tags[] = $tag; | |
235 } | |
236 } |