Chris@0
|
1 <?php
|
Chris@0
|
2 /*
|
Chris@14
|
3 * This file is part of php-token-stream.
|
Chris@0
|
4 *
|
Chris@0
|
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
|
Chris@0
|
6 *
|
Chris@0
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
8 * file that was distributed with this source code.
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * A PHP token.
|
Chris@0
|
13 */
|
Chris@0
|
14 abstract class PHP_Token
|
Chris@0
|
15 {
|
Chris@0
|
16 /**
|
Chris@0
|
17 * @var string
|
Chris@0
|
18 */
|
Chris@0
|
19 protected $text;
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@14
|
22 * @var int
|
Chris@0
|
23 */
|
Chris@0
|
24 protected $line;
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * @var PHP_Token_Stream
|
Chris@0
|
28 */
|
Chris@0
|
29 protected $tokenStream;
|
Chris@0
|
30
|
Chris@0
|
31 /**
|
Chris@14
|
32 * @var int
|
Chris@0
|
33 */
|
Chris@0
|
34 protected $id;
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * @param string $text
|
Chris@14
|
38 * @param int $line
|
Chris@0
|
39 * @param PHP_Token_Stream $tokenStream
|
Chris@14
|
40 * @param int $id
|
Chris@0
|
41 */
|
Chris@0
|
42 public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id)
|
Chris@0
|
43 {
|
Chris@0
|
44 $this->text = $text;
|
Chris@0
|
45 $this->line = $line;
|
Chris@0
|
46 $this->tokenStream = $tokenStream;
|
Chris@0
|
47 $this->id = $id;
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * @return string
|
Chris@0
|
52 */
|
Chris@0
|
53 public function __toString()
|
Chris@0
|
54 {
|
Chris@0
|
55 return $this->text;
|
Chris@0
|
56 }
|
Chris@0
|
57
|
Chris@0
|
58 /**
|
Chris@14
|
59 * @return int
|
Chris@0
|
60 */
|
Chris@0
|
61 public function getLine()
|
Chris@0
|
62 {
|
Chris@0
|
63 return $this->line;
|
Chris@0
|
64 }
|
Chris@14
|
65
|
Chris@14
|
66 /**
|
Chris@14
|
67 * @return int
|
Chris@14
|
68 */
|
Chris@14
|
69 public function getId()
|
Chris@14
|
70 {
|
Chris@14
|
71 return $this->id;
|
Chris@14
|
72 }
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 abstract class PHP_TokenWithScope extends PHP_Token
|
Chris@0
|
76 {
|
Chris@0
|
77 /**
|
Chris@14
|
78 * @var int
|
Chris@0
|
79 */
|
Chris@0
|
80 protected $endTokenId;
|
Chris@0
|
81
|
Chris@0
|
82 /**
|
Chris@0
|
83 * Get the docblock for this token
|
Chris@0
|
84 *
|
Chris@0
|
85 * This method will fetch the docblock belonging to the current token. The
|
Chris@0
|
86 * docblock must be placed on the line directly above the token to be
|
Chris@0
|
87 * recognized.
|
Chris@0
|
88 *
|
Chris@0
|
89 * @return string|null Returns the docblock as a string if found
|
Chris@0
|
90 */
|
Chris@0
|
91 public function getDocblock()
|
Chris@0
|
92 {
|
Chris@0
|
93 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
94 $currentLineNumber = $tokens[$this->id]->getLine();
|
Chris@0
|
95 $prevLineNumber = $currentLineNumber - 1;
|
Chris@0
|
96
|
Chris@0
|
97 for ($i = $this->id - 1; $i; $i--) {
|
Chris@0
|
98 if (!isset($tokens[$i])) {
|
Chris@0
|
99 return;
|
Chris@0
|
100 }
|
Chris@0
|
101
|
Chris@0
|
102 if ($tokens[$i] instanceof PHP_Token_FUNCTION ||
|
Chris@0
|
103 $tokens[$i] instanceof PHP_Token_CLASS ||
|
Chris@0
|
104 $tokens[$i] instanceof PHP_Token_TRAIT) {
|
Chris@0
|
105 // Some other trait, class or function, no docblock can be
|
Chris@0
|
106 // used for the current token
|
Chris@0
|
107 break;
|
Chris@0
|
108 }
|
Chris@0
|
109
|
Chris@0
|
110 $line = $tokens[$i]->getLine();
|
Chris@0
|
111
|
Chris@0
|
112 if ($line == $currentLineNumber ||
|
Chris@0
|
113 ($line == $prevLineNumber &&
|
Chris@0
|
114 $tokens[$i] instanceof PHP_Token_WHITESPACE)) {
|
Chris@0
|
115 continue;
|
Chris@0
|
116 }
|
Chris@0
|
117
|
Chris@0
|
118 if ($line < $currentLineNumber &&
|
Chris@0
|
119 !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) {
|
Chris@0
|
120 break;
|
Chris@0
|
121 }
|
Chris@0
|
122
|
Chris@14
|
123 return (string) $tokens[$i];
|
Chris@0
|
124 }
|
Chris@0
|
125 }
|
Chris@0
|
126
|
Chris@0
|
127 /**
|
Chris@14
|
128 * @return int
|
Chris@0
|
129 */
|
Chris@0
|
130 public function getEndTokenId()
|
Chris@0
|
131 {
|
Chris@0
|
132 $block = 0;
|
Chris@0
|
133 $i = $this->id;
|
Chris@0
|
134 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
135
|
Chris@0
|
136 while ($this->endTokenId === null && isset($tokens[$i])) {
|
Chris@0
|
137 if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY ||
|
Chris@0
|
138 $tokens[$i] instanceof PHP_Token_CURLY_OPEN) {
|
Chris@0
|
139 $block++;
|
Chris@0
|
140 } elseif ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) {
|
Chris@0
|
141 $block--;
|
Chris@0
|
142
|
Chris@0
|
143 if ($block === 0) {
|
Chris@0
|
144 $this->endTokenId = $i;
|
Chris@0
|
145 }
|
Chris@0
|
146 } elseif (($this instanceof PHP_Token_FUNCTION ||
|
Chris@0
|
147 $this instanceof PHP_Token_NAMESPACE) &&
|
Chris@0
|
148 $tokens[$i] instanceof PHP_Token_SEMICOLON) {
|
Chris@0
|
149 if ($block === 0) {
|
Chris@0
|
150 $this->endTokenId = $i;
|
Chris@0
|
151 }
|
Chris@0
|
152 }
|
Chris@0
|
153
|
Chris@0
|
154 $i++;
|
Chris@0
|
155 }
|
Chris@0
|
156
|
Chris@0
|
157 if ($this->endTokenId === null) {
|
Chris@0
|
158 $this->endTokenId = $this->id;
|
Chris@0
|
159 }
|
Chris@0
|
160
|
Chris@0
|
161 return $this->endTokenId;
|
Chris@0
|
162 }
|
Chris@0
|
163
|
Chris@0
|
164 /**
|
Chris@14
|
165 * @return int
|
Chris@0
|
166 */
|
Chris@0
|
167 public function getEndLine()
|
Chris@0
|
168 {
|
Chris@0
|
169 return $this->tokenStream[$this->getEndTokenId()]->getLine();
|
Chris@0
|
170 }
|
Chris@0
|
171 }
|
Chris@0
|
172
|
Chris@0
|
173 abstract class PHP_TokenWithScopeAndVisibility extends PHP_TokenWithScope
|
Chris@0
|
174 {
|
Chris@0
|
175 /**
|
Chris@0
|
176 * @return string
|
Chris@0
|
177 */
|
Chris@0
|
178 public function getVisibility()
|
Chris@0
|
179 {
|
Chris@0
|
180 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
181
|
Chris@0
|
182 for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
|
Chris@0
|
183 if (isset($tokens[$i]) &&
|
Chris@0
|
184 ($tokens[$i] instanceof PHP_Token_PRIVATE ||
|
Chris@0
|
185 $tokens[$i] instanceof PHP_Token_PROTECTED ||
|
Chris@0
|
186 $tokens[$i] instanceof PHP_Token_PUBLIC)) {
|
Chris@0
|
187 return strtolower(
|
Chris@0
|
188 str_replace('PHP_Token_', '', get_class($tokens[$i]))
|
Chris@0
|
189 );
|
Chris@0
|
190 }
|
Chris@0
|
191 if (isset($tokens[$i]) &&
|
Chris@0
|
192 !($tokens[$i] instanceof PHP_Token_STATIC ||
|
Chris@0
|
193 $tokens[$i] instanceof PHP_Token_FINAL ||
|
Chris@0
|
194 $tokens[$i] instanceof PHP_Token_ABSTRACT)) {
|
Chris@0
|
195 // no keywords; stop visibility search
|
Chris@0
|
196 break;
|
Chris@0
|
197 }
|
Chris@0
|
198 }
|
Chris@0
|
199 }
|
Chris@0
|
200
|
Chris@0
|
201 /**
|
Chris@0
|
202 * @return string
|
Chris@0
|
203 */
|
Chris@0
|
204 public function getKeywords()
|
Chris@0
|
205 {
|
Chris@14
|
206 $keywords = [];
|
Chris@0
|
207 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
208
|
Chris@0
|
209 for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
|
Chris@0
|
210 if (isset($tokens[$i]) &&
|
Chris@0
|
211 ($tokens[$i] instanceof PHP_Token_PRIVATE ||
|
Chris@0
|
212 $tokens[$i] instanceof PHP_Token_PROTECTED ||
|
Chris@0
|
213 $tokens[$i] instanceof PHP_Token_PUBLIC)) {
|
Chris@0
|
214 continue;
|
Chris@0
|
215 }
|
Chris@0
|
216
|
Chris@0
|
217 if (isset($tokens[$i]) &&
|
Chris@0
|
218 ($tokens[$i] instanceof PHP_Token_STATIC ||
|
Chris@0
|
219 $tokens[$i] instanceof PHP_Token_FINAL ||
|
Chris@0
|
220 $tokens[$i] instanceof PHP_Token_ABSTRACT)) {
|
Chris@0
|
221 $keywords[] = strtolower(
|
Chris@0
|
222 str_replace('PHP_Token_', '', get_class($tokens[$i]))
|
Chris@0
|
223 );
|
Chris@0
|
224 }
|
Chris@0
|
225 }
|
Chris@0
|
226
|
Chris@0
|
227 return implode(',', $keywords);
|
Chris@0
|
228 }
|
Chris@0
|
229 }
|
Chris@0
|
230
|
Chris@0
|
231 abstract class PHP_Token_Includes extends PHP_Token
|
Chris@0
|
232 {
|
Chris@0
|
233 /**
|
Chris@0
|
234 * @var string
|
Chris@0
|
235 */
|
Chris@0
|
236 protected $name;
|
Chris@0
|
237
|
Chris@0
|
238 /**
|
Chris@0
|
239 * @var string
|
Chris@0
|
240 */
|
Chris@0
|
241 protected $type;
|
Chris@0
|
242
|
Chris@0
|
243 /**
|
Chris@0
|
244 * @return string
|
Chris@0
|
245 */
|
Chris@0
|
246 public function getName()
|
Chris@0
|
247 {
|
Chris@0
|
248 if ($this->name === null) {
|
Chris@0
|
249 $this->process();
|
Chris@0
|
250 }
|
Chris@0
|
251
|
Chris@0
|
252 return $this->name;
|
Chris@0
|
253 }
|
Chris@0
|
254
|
Chris@0
|
255 /**
|
Chris@0
|
256 * @return string
|
Chris@0
|
257 */
|
Chris@0
|
258 public function getType()
|
Chris@0
|
259 {
|
Chris@0
|
260 if ($this->type === null) {
|
Chris@0
|
261 $this->process();
|
Chris@0
|
262 }
|
Chris@0
|
263
|
Chris@0
|
264 return $this->type;
|
Chris@0
|
265 }
|
Chris@0
|
266
|
Chris@0
|
267 private function process()
|
Chris@0
|
268 {
|
Chris@0
|
269 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
270
|
Chris@14
|
271 if ($tokens[$this->id + 2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) {
|
Chris@14
|
272 $this->name = trim($tokens[$this->id + 2], "'\"");
|
Chris@0
|
273 $this->type = strtolower(
|
Chris@0
|
274 str_replace('PHP_Token_', '', get_class($tokens[$this->id]))
|
Chris@0
|
275 );
|
Chris@0
|
276 }
|
Chris@0
|
277 }
|
Chris@0
|
278 }
|
Chris@0
|
279
|
Chris@0
|
280 class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility
|
Chris@0
|
281 {
|
Chris@0
|
282 /**
|
Chris@0
|
283 * @var array
|
Chris@0
|
284 */
|
Chris@0
|
285 protected $arguments;
|
Chris@0
|
286
|
Chris@0
|
287 /**
|
Chris@14
|
288 * @var int
|
Chris@0
|
289 */
|
Chris@0
|
290 protected $ccn;
|
Chris@0
|
291
|
Chris@0
|
292 /**
|
Chris@0
|
293 * @var string
|
Chris@0
|
294 */
|
Chris@0
|
295 protected $name;
|
Chris@0
|
296
|
Chris@0
|
297 /**
|
Chris@0
|
298 * @var string
|
Chris@0
|
299 */
|
Chris@0
|
300 protected $signature;
|
Chris@0
|
301
|
Chris@0
|
302 /**
|
Chris@14
|
303 * @var bool
|
Chris@14
|
304 */
|
Chris@14
|
305 private $anonymous = false;
|
Chris@14
|
306
|
Chris@14
|
307 /**
|
Chris@0
|
308 * @return array
|
Chris@0
|
309 */
|
Chris@0
|
310 public function getArguments()
|
Chris@0
|
311 {
|
Chris@0
|
312 if ($this->arguments !== null) {
|
Chris@0
|
313 return $this->arguments;
|
Chris@0
|
314 }
|
Chris@0
|
315
|
Chris@14
|
316 $this->arguments = [];
|
Chris@0
|
317 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
318 $typeDeclaration = null;
|
Chris@0
|
319
|
Chris@0
|
320 // Search for first token inside brackets
|
Chris@0
|
321 $i = $this->id + 2;
|
Chris@0
|
322
|
Chris@14
|
323 while (!$tokens[$i - 1] instanceof PHP_Token_OPEN_BRACKET) {
|
Chris@0
|
324 $i++;
|
Chris@0
|
325 }
|
Chris@0
|
326
|
Chris@0
|
327 while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) {
|
Chris@0
|
328 if ($tokens[$i] instanceof PHP_Token_STRING) {
|
Chris@14
|
329 $typeDeclaration = (string) $tokens[$i];
|
Chris@0
|
330 } elseif ($tokens[$i] instanceof PHP_Token_VARIABLE) {
|
Chris@14
|
331 $this->arguments[(string) $tokens[$i]] = $typeDeclaration;
|
Chris@14
|
332 $typeDeclaration = null;
|
Chris@0
|
333 }
|
Chris@0
|
334
|
Chris@0
|
335 $i++;
|
Chris@0
|
336 }
|
Chris@0
|
337
|
Chris@0
|
338 return $this->arguments;
|
Chris@0
|
339 }
|
Chris@0
|
340
|
Chris@0
|
341 /**
|
Chris@0
|
342 * @return string
|
Chris@0
|
343 */
|
Chris@0
|
344 public function getName()
|
Chris@0
|
345 {
|
Chris@0
|
346 if ($this->name !== null) {
|
Chris@0
|
347 return $this->name;
|
Chris@0
|
348 }
|
Chris@0
|
349
|
Chris@0
|
350 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
351
|
Chris@14
|
352 $i = $this->id + 1;
|
Chris@14
|
353
|
Chris@14
|
354 if ($tokens[$i] instanceof PHP_Token_WHITESPACE) {
|
Chris@14
|
355 $i++;
|
Chris@0
|
356 }
|
Chris@0
|
357
|
Chris@14
|
358 if ($tokens[$i] instanceof PHP_Token_AMPERSAND) {
|
Chris@14
|
359 $i++;
|
Chris@14
|
360 }
|
Chris@14
|
361
|
Chris@14
|
362 if ($tokens[$i + 1] instanceof PHP_Token_OPEN_BRACKET) {
|
Chris@14
|
363 $this->name = (string) $tokens[$i];
|
Chris@14
|
364 } elseif ($tokens[$i + 1] instanceof PHP_Token_WHITESPACE && $tokens[$i + 2] instanceof PHP_Token_OPEN_BRACKET) {
|
Chris@14
|
365 $this->name = (string) $tokens[$i];
|
Chris@14
|
366 } else {
|
Chris@14
|
367 $this->anonymous = true;
|
Chris@14
|
368
|
Chris@14
|
369 $this->name = sprintf(
|
Chris@14
|
370 'anonymousFunction:%s#%s',
|
Chris@14
|
371 $this->getLine(),
|
Chris@14
|
372 $this->getId()
|
Chris@14
|
373 );
|
Chris@14
|
374 }
|
Chris@14
|
375
|
Chris@14
|
376 if (!$this->isAnonymous()) {
|
Chris@0
|
377 for ($i = $this->id; $i; --$i) {
|
Chris@0
|
378 if ($tokens[$i] instanceof PHP_Token_NAMESPACE) {
|
Chris@0
|
379 $this->name = $tokens[$i]->getName() . '\\' . $this->name;
|
Chris@14
|
380
|
Chris@0
|
381 break;
|
Chris@0
|
382 }
|
Chris@0
|
383
|
Chris@0
|
384 if ($tokens[$i] instanceof PHP_Token_INTERFACE) {
|
Chris@0
|
385 break;
|
Chris@0
|
386 }
|
Chris@0
|
387 }
|
Chris@0
|
388 }
|
Chris@0
|
389
|
Chris@0
|
390 return $this->name;
|
Chris@0
|
391 }
|
Chris@0
|
392
|
Chris@0
|
393 /**
|
Chris@14
|
394 * @return int
|
Chris@0
|
395 */
|
Chris@0
|
396 public function getCCN()
|
Chris@0
|
397 {
|
Chris@0
|
398 if ($this->ccn !== null) {
|
Chris@0
|
399 return $this->ccn;
|
Chris@0
|
400 }
|
Chris@0
|
401
|
Chris@0
|
402 $this->ccn = 1;
|
Chris@0
|
403 $end = $this->getEndTokenId();
|
Chris@0
|
404 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
405
|
Chris@0
|
406 for ($i = $this->id; $i <= $end; $i++) {
|
Chris@0
|
407 switch (get_class($tokens[$i])) {
|
Chris@0
|
408 case 'PHP_Token_IF':
|
Chris@0
|
409 case 'PHP_Token_ELSEIF':
|
Chris@0
|
410 case 'PHP_Token_FOR':
|
Chris@0
|
411 case 'PHP_Token_FOREACH':
|
Chris@0
|
412 case 'PHP_Token_WHILE':
|
Chris@0
|
413 case 'PHP_Token_CASE':
|
Chris@0
|
414 case 'PHP_Token_CATCH':
|
Chris@0
|
415 case 'PHP_Token_BOOLEAN_AND':
|
Chris@0
|
416 case 'PHP_Token_LOGICAL_AND':
|
Chris@0
|
417 case 'PHP_Token_BOOLEAN_OR':
|
Chris@0
|
418 case 'PHP_Token_LOGICAL_OR':
|
Chris@0
|
419 case 'PHP_Token_QUESTION_MARK':
|
Chris@0
|
420 $this->ccn++;
|
Chris@0
|
421 break;
|
Chris@0
|
422 }
|
Chris@0
|
423 }
|
Chris@0
|
424
|
Chris@0
|
425 return $this->ccn;
|
Chris@0
|
426 }
|
Chris@0
|
427
|
Chris@0
|
428 /**
|
Chris@0
|
429 * @return string
|
Chris@0
|
430 */
|
Chris@0
|
431 public function getSignature()
|
Chris@0
|
432 {
|
Chris@0
|
433 if ($this->signature !== null) {
|
Chris@0
|
434 return $this->signature;
|
Chris@0
|
435 }
|
Chris@0
|
436
|
Chris@14
|
437 if ($this->isAnonymous()) {
|
Chris@14
|
438 $this->signature = 'anonymousFunction';
|
Chris@0
|
439 $i = $this->id + 1;
|
Chris@0
|
440 } else {
|
Chris@0
|
441 $this->signature = '';
|
Chris@0
|
442 $i = $this->id + 2;
|
Chris@0
|
443 }
|
Chris@0
|
444
|
Chris@0
|
445 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
446
|
Chris@0
|
447 while (isset($tokens[$i]) &&
|
Chris@0
|
448 !$tokens[$i] instanceof PHP_Token_OPEN_CURLY &&
|
Chris@0
|
449 !$tokens[$i] instanceof PHP_Token_SEMICOLON) {
|
Chris@0
|
450 $this->signature .= $tokens[$i++];
|
Chris@0
|
451 }
|
Chris@0
|
452
|
Chris@0
|
453 $this->signature = trim($this->signature);
|
Chris@0
|
454
|
Chris@0
|
455 return $this->signature;
|
Chris@0
|
456 }
|
Chris@14
|
457
|
Chris@14
|
458 /**
|
Chris@14
|
459 * @return bool
|
Chris@14
|
460 */
|
Chris@14
|
461 public function isAnonymous()
|
Chris@14
|
462 {
|
Chris@14
|
463 return $this->anonymous;
|
Chris@14
|
464 }
|
Chris@0
|
465 }
|
Chris@0
|
466
|
Chris@0
|
467 class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility
|
Chris@0
|
468 {
|
Chris@0
|
469 /**
|
Chris@0
|
470 * @var array
|
Chris@0
|
471 */
|
Chris@0
|
472 protected $interfaces;
|
Chris@0
|
473
|
Chris@0
|
474 /**
|
Chris@0
|
475 * @return string
|
Chris@0
|
476 */
|
Chris@0
|
477 public function getName()
|
Chris@0
|
478 {
|
Chris@14
|
479 return (string) $this->tokenStream[$this->id + 2];
|
Chris@0
|
480 }
|
Chris@0
|
481
|
Chris@0
|
482 /**
|
Chris@14
|
483 * @return bool
|
Chris@0
|
484 */
|
Chris@0
|
485 public function hasParent()
|
Chris@0
|
486 {
|
Chris@0
|
487 return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS;
|
Chris@0
|
488 }
|
Chris@0
|
489
|
Chris@0
|
490 /**
|
Chris@0
|
491 * @return array
|
Chris@0
|
492 */
|
Chris@0
|
493 public function getPackage()
|
Chris@0
|
494 {
|
Chris@0
|
495 $className = $this->getName();
|
Chris@0
|
496 $docComment = $this->getDocblock();
|
Chris@0
|
497
|
Chris@14
|
498 $result = [
|
Chris@0
|
499 'namespace' => '',
|
Chris@0
|
500 'fullPackage' => '',
|
Chris@0
|
501 'category' => '',
|
Chris@0
|
502 'package' => '',
|
Chris@0
|
503 'subpackage' => ''
|
Chris@14
|
504 ];
|
Chris@0
|
505
|
Chris@0
|
506 for ($i = $this->id; $i; --$i) {
|
Chris@0
|
507 if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) {
|
Chris@0
|
508 $result['namespace'] = $this->tokenStream[$i]->getName();
|
Chris@0
|
509 break;
|
Chris@0
|
510 }
|
Chris@0
|
511 }
|
Chris@0
|
512
|
Chris@0
|
513 if (preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) {
|
Chris@0
|
514 $result['category'] = $matches[1];
|
Chris@0
|
515 }
|
Chris@0
|
516
|
Chris@0
|
517 if (preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) {
|
Chris@0
|
518 $result['package'] = $matches[1];
|
Chris@0
|
519 $result['fullPackage'] = $matches[1];
|
Chris@0
|
520 }
|
Chris@0
|
521
|
Chris@0
|
522 if (preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) {
|
Chris@0
|
523 $result['subpackage'] = $matches[1];
|
Chris@0
|
524 $result['fullPackage'] .= '.' . $matches[1];
|
Chris@0
|
525 }
|
Chris@0
|
526
|
Chris@0
|
527 if (empty($result['fullPackage'])) {
|
Chris@0
|
528 $result['fullPackage'] = $this->arrayToName(
|
Chris@0
|
529 explode('_', str_replace('\\', '_', $className)),
|
Chris@0
|
530 '.'
|
Chris@0
|
531 );
|
Chris@0
|
532 }
|
Chris@0
|
533
|
Chris@0
|
534 return $result;
|
Chris@0
|
535 }
|
Chris@0
|
536
|
Chris@0
|
537 /**
|
Chris@14
|
538 * @param array $parts
|
Chris@14
|
539 * @param string $join
|
Chris@14
|
540 *
|
Chris@0
|
541 * @return string
|
Chris@0
|
542 */
|
Chris@0
|
543 protected function arrayToName(array $parts, $join = '\\')
|
Chris@0
|
544 {
|
Chris@0
|
545 $result = '';
|
Chris@0
|
546
|
Chris@0
|
547 if (count($parts) > 1) {
|
Chris@0
|
548 array_pop($parts);
|
Chris@0
|
549
|
Chris@14
|
550 $result = implode($join, $parts);
|
Chris@0
|
551 }
|
Chris@0
|
552
|
Chris@0
|
553 return $result;
|
Chris@0
|
554 }
|
Chris@0
|
555
|
Chris@0
|
556 /**
|
Chris@14
|
557 * @return bool|string
|
Chris@0
|
558 */
|
Chris@0
|
559 public function getParent()
|
Chris@0
|
560 {
|
Chris@0
|
561 if (!$this->hasParent()) {
|
Chris@0
|
562 return false;
|
Chris@0
|
563 }
|
Chris@0
|
564
|
Chris@0
|
565 $i = $this->id + 6;
|
Chris@0
|
566 $tokens = $this->tokenStream->tokens();
|
Chris@14
|
567 $className = (string) $tokens[$i];
|
Chris@0
|
568
|
Chris@14
|
569 while (isset($tokens[$i + 1]) &&
|
Chris@14
|
570 !$tokens[$i + 1] instanceof PHP_Token_WHITESPACE) {
|
Chris@14
|
571 $className .= (string) $tokens[++$i];
|
Chris@0
|
572 }
|
Chris@0
|
573
|
Chris@0
|
574 return $className;
|
Chris@0
|
575 }
|
Chris@0
|
576
|
Chris@0
|
577 /**
|
Chris@14
|
578 * @return bool
|
Chris@0
|
579 */
|
Chris@0
|
580 public function hasInterfaces()
|
Chris@0
|
581 {
|
Chris@0
|
582 return (isset($this->tokenStream[$this->id + 4]) &&
|
Chris@0
|
583 $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) ||
|
Chris@0
|
584 (isset($this->tokenStream[$this->id + 8]) &&
|
Chris@0
|
585 $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS);
|
Chris@0
|
586 }
|
Chris@0
|
587
|
Chris@0
|
588 /**
|
Chris@14
|
589 * @return array|bool
|
Chris@0
|
590 */
|
Chris@0
|
591 public function getInterfaces()
|
Chris@0
|
592 {
|
Chris@0
|
593 if ($this->interfaces !== null) {
|
Chris@0
|
594 return $this->interfaces;
|
Chris@0
|
595 }
|
Chris@0
|
596
|
Chris@0
|
597 if (!$this->hasInterfaces()) {
|
Chris@0
|
598 return ($this->interfaces = false);
|
Chris@0
|
599 }
|
Chris@0
|
600
|
Chris@0
|
601 if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) {
|
Chris@0
|
602 $i = $this->id + 3;
|
Chris@0
|
603 } else {
|
Chris@0
|
604 $i = $this->id + 7;
|
Chris@0
|
605 }
|
Chris@0
|
606
|
Chris@0
|
607 $tokens = $this->tokenStream->tokens();
|
Chris@0
|
608
|
Chris@14
|
609 while (!$tokens[$i + 1] instanceof PHP_Token_OPEN_CURLY) {
|
Chris@0
|
610 $i++;
|
Chris@0
|
611
|
Chris@0
|
612 if ($tokens[$i] instanceof PHP_Token_STRING) {
|
Chris@14
|
613 $this->interfaces[] = (string) $tokens[$i];
|
Chris@0
|
614 }
|
Chris@0
|
615 }
|
Chris@0
|
616
|
Chris@0
|
617 return $this->interfaces;
|
Chris@0
|
618 }
|
Chris@0
|
619 }
|
Chris@0
|
620
|
Chris@14
|
621 class PHP_Token_ABSTRACT extends PHP_Token
|
Chris@14
|
622 {
|
Chris@14
|
623 }
|
Chris@14
|
624
|
Chris@14
|
625 class PHP_Token_AMPERSAND extends PHP_Token
|
Chris@14
|
626 {
|
Chris@14
|
627 }
|
Chris@14
|
628
|
Chris@14
|
629 class PHP_Token_AND_EQUAL extends PHP_Token
|
Chris@14
|
630 {
|
Chris@14
|
631 }
|
Chris@14
|
632
|
Chris@14
|
633 class PHP_Token_ARRAY extends PHP_Token
|
Chris@14
|
634 {
|
Chris@14
|
635 }
|
Chris@14
|
636
|
Chris@14
|
637 class PHP_Token_ARRAY_CAST extends PHP_Token
|
Chris@14
|
638 {
|
Chris@14
|
639 }
|
Chris@14
|
640
|
Chris@14
|
641 class PHP_Token_AS extends PHP_Token
|
Chris@14
|
642 {
|
Chris@14
|
643 }
|
Chris@14
|
644
|
Chris@14
|
645 class PHP_Token_AT extends PHP_Token
|
Chris@14
|
646 {
|
Chris@14
|
647 }
|
Chris@14
|
648
|
Chris@14
|
649 class PHP_Token_BACKTICK extends PHP_Token
|
Chris@14
|
650 {
|
Chris@14
|
651 }
|
Chris@14
|
652
|
Chris@14
|
653 class PHP_Token_BAD_CHARACTER extends PHP_Token
|
Chris@14
|
654 {
|
Chris@14
|
655 }
|
Chris@14
|
656
|
Chris@14
|
657 class PHP_Token_BOOLEAN_AND extends PHP_Token
|
Chris@14
|
658 {
|
Chris@14
|
659 }
|
Chris@14
|
660
|
Chris@14
|
661 class PHP_Token_BOOLEAN_OR extends PHP_Token
|
Chris@14
|
662 {
|
Chris@14
|
663 }
|
Chris@14
|
664
|
Chris@14
|
665 class PHP_Token_BOOL_CAST extends PHP_Token
|
Chris@14
|
666 {
|
Chris@14
|
667 }
|
Chris@14
|
668
|
Chris@14
|
669 class PHP_Token_BREAK extends PHP_Token
|
Chris@14
|
670 {
|
Chris@14
|
671 }
|
Chris@14
|
672
|
Chris@14
|
673 class PHP_Token_CARET extends PHP_Token
|
Chris@14
|
674 {
|
Chris@14
|
675 }
|
Chris@14
|
676
|
Chris@14
|
677 class PHP_Token_CASE extends PHP_Token
|
Chris@14
|
678 {
|
Chris@14
|
679 }
|
Chris@14
|
680
|
Chris@14
|
681 class PHP_Token_CATCH extends PHP_Token
|
Chris@14
|
682 {
|
Chris@14
|
683 }
|
Chris@14
|
684
|
Chris@14
|
685 class PHP_Token_CHARACTER extends PHP_Token
|
Chris@14
|
686 {
|
Chris@14
|
687 }
|
Chris@0
|
688
|
Chris@0
|
689 class PHP_Token_CLASS extends PHP_Token_INTERFACE
|
Chris@0
|
690 {
|
Chris@0
|
691 /**
|
Chris@14
|
692 * @var bool
|
Chris@14
|
693 */
|
Chris@14
|
694 private $anonymous = false;
|
Chris@14
|
695
|
Chris@14
|
696 /**
|
Chris@14
|
697 * @var string
|
Chris@14
|
698 */
|
Chris@14
|
699 private $name;
|
Chris@14
|
700
|
Chris@14
|
701 /**
|
Chris@0
|
702 * @return string
|
Chris@0
|
703 */
|
Chris@0
|
704 public function getName()
|
Chris@0
|
705 {
|
Chris@14
|
706 if ($this->name !== null) {
|
Chris@14
|
707 return $this->name;
|
Chris@14
|
708 }
|
Chris@14
|
709
|
Chris@0
|
710 $next = $this->tokenStream[$this->id + 1];
|
Chris@0
|
711
|
Chris@0
|
712 if ($next instanceof PHP_Token_WHITESPACE) {
|
Chris@0
|
713 $next = $this->tokenStream[$this->id + 2];
|
Chris@0
|
714 }
|
Chris@0
|
715
|
Chris@0
|
716 if ($next instanceof PHP_Token_STRING) {
|
Chris@14
|
717 $this->name =(string) $next;
|
Chris@14
|
718
|
Chris@14
|
719 return $this->name;
|
Chris@0
|
720 }
|
Chris@0
|
721
|
Chris@0
|
722 if ($next instanceof PHP_Token_OPEN_CURLY ||
|
Chris@0
|
723 $next instanceof PHP_Token_EXTENDS ||
|
Chris@0
|
724 $next instanceof PHP_Token_IMPLEMENTS) {
|
Chris@14
|
725
|
Chris@14
|
726 $this->name = sprintf(
|
Chris@14
|
727 'AnonymousClass:%s#%s',
|
Chris@14
|
728 $this->getLine(),
|
Chris@14
|
729 $this->getId()
|
Chris@14
|
730 );
|
Chris@14
|
731
|
Chris@14
|
732 $this->anonymous = true;
|
Chris@14
|
733
|
Chris@14
|
734 return $this->name;
|
Chris@0
|
735 }
|
Chris@0
|
736 }
|
Chris@14
|
737
|
Chris@14
|
738 public function isAnonymous()
|
Chris@14
|
739 {
|
Chris@14
|
740 return $this->anonymous;
|
Chris@14
|
741 }
|
Chris@0
|
742 }
|
Chris@0
|
743
|
Chris@14
|
744 class PHP_Token_CLASS_C extends PHP_Token
|
Chris@14
|
745 {
|
Chris@14
|
746 }
|
Chris@14
|
747
|
Chris@14
|
748 class PHP_Token_CLASS_NAME_CONSTANT extends PHP_Token
|
Chris@14
|
749 {
|
Chris@14
|
750 }
|
Chris@14
|
751
|
Chris@14
|
752 class PHP_Token_CLONE extends PHP_Token
|
Chris@14
|
753 {
|
Chris@14
|
754 }
|
Chris@14
|
755
|
Chris@14
|
756 class PHP_Token_CLOSE_BRACKET extends PHP_Token
|
Chris@14
|
757 {
|
Chris@14
|
758 }
|
Chris@14
|
759
|
Chris@14
|
760 class PHP_Token_CLOSE_CURLY extends PHP_Token
|
Chris@14
|
761 {
|
Chris@14
|
762 }
|
Chris@14
|
763
|
Chris@14
|
764 class PHP_Token_CLOSE_SQUARE extends PHP_Token
|
Chris@14
|
765 {
|
Chris@14
|
766 }
|
Chris@14
|
767
|
Chris@14
|
768 class PHP_Token_CLOSE_TAG extends PHP_Token
|
Chris@14
|
769 {
|
Chris@14
|
770 }
|
Chris@14
|
771
|
Chris@14
|
772 class PHP_Token_COLON extends PHP_Token
|
Chris@14
|
773 {
|
Chris@14
|
774 }
|
Chris@14
|
775
|
Chris@14
|
776 class PHP_Token_COMMA extends PHP_Token
|
Chris@14
|
777 {
|
Chris@14
|
778 }
|
Chris@14
|
779
|
Chris@14
|
780 class PHP_Token_COMMENT extends PHP_Token
|
Chris@14
|
781 {
|
Chris@14
|
782 }
|
Chris@14
|
783
|
Chris@14
|
784 class PHP_Token_CONCAT_EQUAL extends PHP_Token
|
Chris@14
|
785 {
|
Chris@14
|
786 }
|
Chris@14
|
787
|
Chris@14
|
788 class PHP_Token_CONST extends PHP_Token
|
Chris@14
|
789 {
|
Chris@14
|
790 }
|
Chris@14
|
791
|
Chris@14
|
792 class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token
|
Chris@14
|
793 {
|
Chris@14
|
794 }
|
Chris@14
|
795
|
Chris@14
|
796 class PHP_Token_CONTINUE extends PHP_Token
|
Chris@14
|
797 {
|
Chris@14
|
798 }
|
Chris@14
|
799
|
Chris@14
|
800 class PHP_Token_CURLY_OPEN extends PHP_Token
|
Chris@14
|
801 {
|
Chris@14
|
802 }
|
Chris@14
|
803
|
Chris@14
|
804 class PHP_Token_DEC extends PHP_Token
|
Chris@14
|
805 {
|
Chris@14
|
806 }
|
Chris@14
|
807
|
Chris@14
|
808 class PHP_Token_DECLARE extends PHP_Token
|
Chris@14
|
809 {
|
Chris@14
|
810 }
|
Chris@14
|
811
|
Chris@14
|
812 class PHP_Token_DEFAULT extends PHP_Token
|
Chris@14
|
813 {
|
Chris@14
|
814 }
|
Chris@14
|
815
|
Chris@14
|
816 class PHP_Token_DIV extends PHP_Token
|
Chris@14
|
817 {
|
Chris@14
|
818 }
|
Chris@14
|
819
|
Chris@14
|
820 class PHP_Token_DIV_EQUAL extends PHP_Token
|
Chris@14
|
821 {
|
Chris@14
|
822 }
|
Chris@14
|
823
|
Chris@14
|
824 class PHP_Token_DNUMBER extends PHP_Token
|
Chris@14
|
825 {
|
Chris@14
|
826 }
|
Chris@14
|
827
|
Chris@14
|
828 class PHP_Token_DO extends PHP_Token
|
Chris@14
|
829 {
|
Chris@14
|
830 }
|
Chris@14
|
831
|
Chris@14
|
832 class PHP_Token_DOC_COMMENT extends PHP_Token
|
Chris@14
|
833 {
|
Chris@14
|
834 }
|
Chris@14
|
835
|
Chris@14
|
836 class PHP_Token_DOLLAR extends PHP_Token
|
Chris@14
|
837 {
|
Chris@14
|
838 }
|
Chris@14
|
839
|
Chris@14
|
840 class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token
|
Chris@14
|
841 {
|
Chris@14
|
842 }
|
Chris@14
|
843
|
Chris@14
|
844 class PHP_Token_DOT extends PHP_Token
|
Chris@14
|
845 {
|
Chris@14
|
846 }
|
Chris@14
|
847
|
Chris@14
|
848 class PHP_Token_DOUBLE_ARROW extends PHP_Token
|
Chris@14
|
849 {
|
Chris@14
|
850 }
|
Chris@14
|
851
|
Chris@14
|
852 class PHP_Token_DOUBLE_CAST extends PHP_Token
|
Chris@14
|
853 {
|
Chris@14
|
854 }
|
Chris@14
|
855
|
Chris@14
|
856 class PHP_Token_DOUBLE_COLON extends PHP_Token
|
Chris@14
|
857 {
|
Chris@14
|
858 }
|
Chris@14
|
859
|
Chris@14
|
860 class PHP_Token_DOUBLE_QUOTES extends PHP_Token
|
Chris@14
|
861 {
|
Chris@14
|
862 }
|
Chris@14
|
863
|
Chris@14
|
864 class PHP_Token_ECHO extends PHP_Token
|
Chris@14
|
865 {
|
Chris@14
|
866 }
|
Chris@14
|
867
|
Chris@14
|
868 class PHP_Token_ELSE extends PHP_Token
|
Chris@14
|
869 {
|
Chris@14
|
870 }
|
Chris@14
|
871
|
Chris@14
|
872 class PHP_Token_ELSEIF extends PHP_Token
|
Chris@14
|
873 {
|
Chris@14
|
874 }
|
Chris@14
|
875
|
Chris@14
|
876 class PHP_Token_EMPTY extends PHP_Token
|
Chris@14
|
877 {
|
Chris@14
|
878 }
|
Chris@14
|
879
|
Chris@14
|
880 class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token
|
Chris@14
|
881 {
|
Chris@14
|
882 }
|
Chris@14
|
883
|
Chris@14
|
884 class PHP_Token_ENDDECLARE extends PHP_Token
|
Chris@14
|
885 {
|
Chris@14
|
886 }
|
Chris@14
|
887
|
Chris@14
|
888 class PHP_Token_ENDFOR extends PHP_Token
|
Chris@14
|
889 {
|
Chris@14
|
890 }
|
Chris@14
|
891
|
Chris@14
|
892 class PHP_Token_ENDFOREACH extends PHP_Token
|
Chris@14
|
893 {
|
Chris@14
|
894 }
|
Chris@14
|
895
|
Chris@14
|
896 class PHP_Token_ENDIF extends PHP_Token
|
Chris@14
|
897 {
|
Chris@14
|
898 }
|
Chris@14
|
899
|
Chris@14
|
900 class PHP_Token_ENDSWITCH extends PHP_Token
|
Chris@14
|
901 {
|
Chris@14
|
902 }
|
Chris@14
|
903
|
Chris@14
|
904 class PHP_Token_ENDWHILE extends PHP_Token
|
Chris@14
|
905 {
|
Chris@14
|
906 }
|
Chris@14
|
907
|
Chris@14
|
908 class PHP_Token_END_HEREDOC extends PHP_Token
|
Chris@14
|
909 {
|
Chris@14
|
910 }
|
Chris@14
|
911
|
Chris@14
|
912 class PHP_Token_EQUAL extends PHP_Token
|
Chris@14
|
913 {
|
Chris@14
|
914 }
|
Chris@14
|
915
|
Chris@14
|
916 class PHP_Token_EVAL extends PHP_Token
|
Chris@14
|
917 {
|
Chris@14
|
918 }
|
Chris@14
|
919
|
Chris@14
|
920 class PHP_Token_EXCLAMATION_MARK extends PHP_Token
|
Chris@14
|
921 {
|
Chris@14
|
922 }
|
Chris@14
|
923
|
Chris@14
|
924 class PHP_Token_EXIT extends PHP_Token
|
Chris@14
|
925 {
|
Chris@14
|
926 }
|
Chris@14
|
927
|
Chris@14
|
928 class PHP_Token_EXTENDS extends PHP_Token
|
Chris@14
|
929 {
|
Chris@14
|
930 }
|
Chris@14
|
931
|
Chris@14
|
932 class PHP_Token_FILE extends PHP_Token
|
Chris@14
|
933 {
|
Chris@14
|
934 }
|
Chris@14
|
935
|
Chris@14
|
936 class PHP_Token_FINAL extends PHP_Token
|
Chris@14
|
937 {
|
Chris@14
|
938 }
|
Chris@14
|
939
|
Chris@14
|
940 class PHP_Token_FOR extends PHP_Token
|
Chris@14
|
941 {
|
Chris@14
|
942 }
|
Chris@14
|
943
|
Chris@14
|
944 class PHP_Token_FOREACH extends PHP_Token
|
Chris@14
|
945 {
|
Chris@14
|
946 }
|
Chris@14
|
947
|
Chris@14
|
948 class PHP_Token_FUNC_C extends PHP_Token
|
Chris@14
|
949 {
|
Chris@14
|
950 }
|
Chris@14
|
951
|
Chris@14
|
952 class PHP_Token_GLOBAL extends PHP_Token
|
Chris@14
|
953 {
|
Chris@14
|
954 }
|
Chris@14
|
955
|
Chris@14
|
956 class PHP_Token_GT extends PHP_Token
|
Chris@14
|
957 {
|
Chris@14
|
958 }
|
Chris@14
|
959
|
Chris@14
|
960 class PHP_Token_IF extends PHP_Token
|
Chris@14
|
961 {
|
Chris@14
|
962 }
|
Chris@14
|
963
|
Chris@14
|
964 class PHP_Token_IMPLEMENTS extends PHP_Token
|
Chris@14
|
965 {
|
Chris@14
|
966 }
|
Chris@14
|
967
|
Chris@14
|
968 class PHP_Token_INC extends PHP_Token
|
Chris@14
|
969 {
|
Chris@14
|
970 }
|
Chris@14
|
971
|
Chris@14
|
972 class PHP_Token_INCLUDE extends PHP_Token_Includes
|
Chris@14
|
973 {
|
Chris@14
|
974 }
|
Chris@14
|
975
|
Chris@14
|
976 class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes
|
Chris@14
|
977 {
|
Chris@14
|
978 }
|
Chris@14
|
979
|
Chris@14
|
980 class PHP_Token_INLINE_HTML extends PHP_Token
|
Chris@14
|
981 {
|
Chris@14
|
982 }
|
Chris@14
|
983
|
Chris@14
|
984 class PHP_Token_INSTANCEOF extends PHP_Token
|
Chris@14
|
985 {
|
Chris@14
|
986 }
|
Chris@14
|
987
|
Chris@14
|
988 class PHP_Token_INT_CAST extends PHP_Token
|
Chris@14
|
989 {
|
Chris@14
|
990 }
|
Chris@14
|
991
|
Chris@14
|
992 class PHP_Token_ISSET extends PHP_Token
|
Chris@14
|
993 {
|
Chris@14
|
994 }
|
Chris@14
|
995
|
Chris@14
|
996 class PHP_Token_IS_EQUAL extends PHP_Token
|
Chris@14
|
997 {
|
Chris@14
|
998 }
|
Chris@14
|
999
|
Chris@14
|
1000 class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token
|
Chris@14
|
1001 {
|
Chris@14
|
1002 }
|
Chris@14
|
1003
|
Chris@14
|
1004 class PHP_Token_IS_IDENTICAL extends PHP_Token
|
Chris@14
|
1005 {
|
Chris@14
|
1006 }
|
Chris@14
|
1007
|
Chris@14
|
1008 class PHP_Token_IS_NOT_EQUAL extends PHP_Token
|
Chris@14
|
1009 {
|
Chris@14
|
1010 }
|
Chris@14
|
1011
|
Chris@14
|
1012 class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token
|
Chris@14
|
1013 {
|
Chris@14
|
1014 }
|
Chris@14
|
1015
|
Chris@14
|
1016 class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token
|
Chris@14
|
1017 {
|
Chris@14
|
1018 }
|
Chris@14
|
1019
|
Chris@14
|
1020 class PHP_Token_LINE extends PHP_Token
|
Chris@14
|
1021 {
|
Chris@14
|
1022 }
|
Chris@14
|
1023
|
Chris@14
|
1024 class PHP_Token_LIST extends PHP_Token
|
Chris@14
|
1025 {
|
Chris@14
|
1026 }
|
Chris@14
|
1027
|
Chris@14
|
1028 class PHP_Token_LNUMBER extends PHP_Token
|
Chris@14
|
1029 {
|
Chris@14
|
1030 }
|
Chris@14
|
1031
|
Chris@14
|
1032 class PHP_Token_LOGICAL_AND extends PHP_Token
|
Chris@14
|
1033 {
|
Chris@14
|
1034 }
|
Chris@14
|
1035
|
Chris@14
|
1036 class PHP_Token_LOGICAL_OR extends PHP_Token
|
Chris@14
|
1037 {
|
Chris@14
|
1038 }
|
Chris@14
|
1039
|
Chris@14
|
1040 class PHP_Token_LOGICAL_XOR extends PHP_Token
|
Chris@14
|
1041 {
|
Chris@14
|
1042 }
|
Chris@14
|
1043
|
Chris@14
|
1044 class PHP_Token_LT extends PHP_Token
|
Chris@14
|
1045 {
|
Chris@14
|
1046 }
|
Chris@14
|
1047
|
Chris@14
|
1048 class PHP_Token_METHOD_C extends PHP_Token
|
Chris@14
|
1049 {
|
Chris@14
|
1050 }
|
Chris@14
|
1051
|
Chris@14
|
1052 class PHP_Token_MINUS extends PHP_Token
|
Chris@14
|
1053 {
|
Chris@14
|
1054 }
|
Chris@14
|
1055
|
Chris@14
|
1056 class PHP_Token_MINUS_EQUAL extends PHP_Token
|
Chris@14
|
1057 {
|
Chris@14
|
1058 }
|
Chris@14
|
1059
|
Chris@14
|
1060 class PHP_Token_MOD_EQUAL extends PHP_Token
|
Chris@14
|
1061 {
|
Chris@14
|
1062 }
|
Chris@14
|
1063
|
Chris@14
|
1064 class PHP_Token_MULT extends PHP_Token
|
Chris@14
|
1065 {
|
Chris@14
|
1066 }
|
Chris@14
|
1067
|
Chris@14
|
1068 class PHP_Token_MUL_EQUAL extends PHP_Token
|
Chris@14
|
1069 {
|
Chris@14
|
1070 }
|
Chris@14
|
1071
|
Chris@14
|
1072 class PHP_Token_NEW extends PHP_Token
|
Chris@14
|
1073 {
|
Chris@14
|
1074 }
|
Chris@14
|
1075
|
Chris@14
|
1076 class PHP_Token_NUM_STRING extends PHP_Token
|
Chris@14
|
1077 {
|
Chris@14
|
1078 }
|
Chris@14
|
1079
|
Chris@14
|
1080 class PHP_Token_OBJECT_CAST extends PHP_Token
|
Chris@14
|
1081 {
|
Chris@14
|
1082 }
|
Chris@14
|
1083
|
Chris@14
|
1084 class PHP_Token_OBJECT_OPERATOR extends PHP_Token
|
Chris@14
|
1085 {
|
Chris@14
|
1086 }
|
Chris@14
|
1087
|
Chris@14
|
1088 class PHP_Token_OPEN_BRACKET extends PHP_Token
|
Chris@14
|
1089 {
|
Chris@14
|
1090 }
|
Chris@14
|
1091
|
Chris@14
|
1092 class PHP_Token_OPEN_CURLY extends PHP_Token
|
Chris@14
|
1093 {
|
Chris@14
|
1094 }
|
Chris@14
|
1095
|
Chris@14
|
1096 class PHP_Token_OPEN_SQUARE extends PHP_Token
|
Chris@14
|
1097 {
|
Chris@14
|
1098 }
|
Chris@14
|
1099
|
Chris@14
|
1100 class PHP_Token_OPEN_TAG extends PHP_Token
|
Chris@14
|
1101 {
|
Chris@14
|
1102 }
|
Chris@14
|
1103
|
Chris@14
|
1104 class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token
|
Chris@14
|
1105 {
|
Chris@14
|
1106 }
|
Chris@14
|
1107
|
Chris@14
|
1108 class PHP_Token_OR_EQUAL extends PHP_Token
|
Chris@14
|
1109 {
|
Chris@14
|
1110 }
|
Chris@14
|
1111
|
Chris@14
|
1112 class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token
|
Chris@14
|
1113 {
|
Chris@14
|
1114 }
|
Chris@14
|
1115
|
Chris@14
|
1116 class PHP_Token_PERCENT extends PHP_Token
|
Chris@14
|
1117 {
|
Chris@14
|
1118 }
|
Chris@14
|
1119
|
Chris@14
|
1120 class PHP_Token_PIPE extends PHP_Token
|
Chris@14
|
1121 {
|
Chris@14
|
1122 }
|
Chris@14
|
1123
|
Chris@14
|
1124 class PHP_Token_PLUS extends PHP_Token
|
Chris@14
|
1125 {
|
Chris@14
|
1126 }
|
Chris@14
|
1127
|
Chris@14
|
1128 class PHP_Token_PLUS_EQUAL extends PHP_Token
|
Chris@14
|
1129 {
|
Chris@14
|
1130 }
|
Chris@14
|
1131
|
Chris@14
|
1132 class PHP_Token_PRINT extends PHP_Token
|
Chris@14
|
1133 {
|
Chris@14
|
1134 }
|
Chris@14
|
1135
|
Chris@14
|
1136 class PHP_Token_PRIVATE extends PHP_Token
|
Chris@14
|
1137 {
|
Chris@14
|
1138 }
|
Chris@14
|
1139
|
Chris@14
|
1140 class PHP_Token_PROTECTED extends PHP_Token
|
Chris@14
|
1141 {
|
Chris@14
|
1142 }
|
Chris@14
|
1143
|
Chris@14
|
1144 class PHP_Token_PUBLIC extends PHP_Token
|
Chris@14
|
1145 {
|
Chris@14
|
1146 }
|
Chris@14
|
1147
|
Chris@14
|
1148 class PHP_Token_QUESTION_MARK extends PHP_Token
|
Chris@14
|
1149 {
|
Chris@14
|
1150 }
|
Chris@14
|
1151
|
Chris@14
|
1152 class PHP_Token_REQUIRE extends PHP_Token_Includes
|
Chris@14
|
1153 {
|
Chris@14
|
1154 }
|
Chris@14
|
1155
|
Chris@14
|
1156 class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes
|
Chris@14
|
1157 {
|
Chris@14
|
1158 }
|
Chris@14
|
1159
|
Chris@14
|
1160 class PHP_Token_RETURN extends PHP_Token
|
Chris@14
|
1161 {
|
Chris@14
|
1162 }
|
Chris@14
|
1163
|
Chris@14
|
1164 class PHP_Token_SEMICOLON extends PHP_Token
|
Chris@14
|
1165 {
|
Chris@14
|
1166 }
|
Chris@14
|
1167
|
Chris@14
|
1168 class PHP_Token_SL extends PHP_Token
|
Chris@14
|
1169 {
|
Chris@14
|
1170 }
|
Chris@14
|
1171
|
Chris@14
|
1172 class PHP_Token_SL_EQUAL extends PHP_Token
|
Chris@14
|
1173 {
|
Chris@14
|
1174 }
|
Chris@14
|
1175
|
Chris@14
|
1176 class PHP_Token_SR extends PHP_Token
|
Chris@14
|
1177 {
|
Chris@14
|
1178 }
|
Chris@14
|
1179
|
Chris@14
|
1180 class PHP_Token_SR_EQUAL extends PHP_Token
|
Chris@14
|
1181 {
|
Chris@14
|
1182 }
|
Chris@14
|
1183
|
Chris@14
|
1184 class PHP_Token_START_HEREDOC extends PHP_Token
|
Chris@14
|
1185 {
|
Chris@14
|
1186 }
|
Chris@14
|
1187
|
Chris@14
|
1188 class PHP_Token_STATIC extends PHP_Token
|
Chris@14
|
1189 {
|
Chris@14
|
1190 }
|
Chris@14
|
1191
|
Chris@14
|
1192 class PHP_Token_STRING extends PHP_Token
|
Chris@14
|
1193 {
|
Chris@14
|
1194 }
|
Chris@14
|
1195
|
Chris@14
|
1196 class PHP_Token_STRING_CAST extends PHP_Token
|
Chris@14
|
1197 {
|
Chris@14
|
1198 }
|
Chris@14
|
1199
|
Chris@14
|
1200 class PHP_Token_STRING_VARNAME extends PHP_Token
|
Chris@14
|
1201 {
|
Chris@14
|
1202 }
|
Chris@14
|
1203
|
Chris@14
|
1204 class PHP_Token_SWITCH extends PHP_Token
|
Chris@14
|
1205 {
|
Chris@14
|
1206 }
|
Chris@14
|
1207
|
Chris@14
|
1208 class PHP_Token_THROW extends PHP_Token
|
Chris@14
|
1209 {
|
Chris@14
|
1210 }
|
Chris@14
|
1211
|
Chris@14
|
1212 class PHP_Token_TILDE extends PHP_Token
|
Chris@14
|
1213 {
|
Chris@14
|
1214 }
|
Chris@14
|
1215
|
Chris@14
|
1216 class PHP_Token_TRY extends PHP_Token
|
Chris@14
|
1217 {
|
Chris@14
|
1218 }
|
Chris@14
|
1219
|
Chris@14
|
1220 class PHP_Token_UNSET extends PHP_Token
|
Chris@14
|
1221 {
|
Chris@14
|
1222 }
|
Chris@14
|
1223
|
Chris@14
|
1224 class PHP_Token_UNSET_CAST extends PHP_Token
|
Chris@14
|
1225 {
|
Chris@14
|
1226 }
|
Chris@14
|
1227
|
Chris@14
|
1228 class PHP_Token_USE extends PHP_Token
|
Chris@14
|
1229 {
|
Chris@14
|
1230 }
|
Chris@14
|
1231
|
Chris@14
|
1232 class PHP_Token_USE_FUNCTION extends PHP_Token
|
Chris@14
|
1233 {
|
Chris@14
|
1234 }
|
Chris@14
|
1235
|
Chris@14
|
1236 class PHP_Token_VAR extends PHP_Token
|
Chris@14
|
1237 {
|
Chris@14
|
1238 }
|
Chris@14
|
1239
|
Chris@14
|
1240 class PHP_Token_VARIABLE extends PHP_Token
|
Chris@14
|
1241 {
|
Chris@14
|
1242 }
|
Chris@14
|
1243
|
Chris@14
|
1244 class PHP_Token_WHILE extends PHP_Token
|
Chris@14
|
1245 {
|
Chris@14
|
1246 }
|
Chris@14
|
1247
|
Chris@14
|
1248 class PHP_Token_WHITESPACE extends PHP_Token
|
Chris@14
|
1249 {
|
Chris@14
|
1250 }
|
Chris@14
|
1251
|
Chris@14
|
1252 class PHP_Token_XOR_EQUAL extends PHP_Token
|
Chris@14
|
1253 {
|
Chris@14
|
1254 }
|
Chris@0
|
1255
|
Chris@0
|
1256 // Tokens introduced in PHP 5.1
|
Chris@14
|
1257 class PHP_Token_HALT_COMPILER extends PHP_Token
|
Chris@14
|
1258 {
|
Chris@14
|
1259 }
|
Chris@0
|
1260
|
Chris@0
|
1261 // Tokens introduced in PHP 5.3
|
Chris@14
|
1262 class PHP_Token_DIR extends PHP_Token
|
Chris@14
|
1263 {
|
Chris@14
|
1264 }
|
Chris@14
|
1265
|
Chris@14
|
1266 class PHP_Token_GOTO extends PHP_Token
|
Chris@14
|
1267 {
|
Chris@14
|
1268 }
|
Chris@0
|
1269
|
Chris@0
|
1270 class PHP_Token_NAMESPACE extends PHP_TokenWithScope
|
Chris@0
|
1271 {
|
Chris@0
|
1272 /**
|
Chris@0
|
1273 * @return string
|
Chris@0
|
1274 */
|
Chris@0
|
1275 public function getName()
|
Chris@0
|
1276 {
|
Chris@0
|
1277 $tokens = $this->tokenStream->tokens();
|
Chris@14
|
1278 $namespace = (string) $tokens[$this->id + 2];
|
Chris@0
|
1279
|
Chris@0
|
1280 for ($i = $this->id + 3;; $i += 2) {
|
Chris@0
|
1281 if (isset($tokens[$i]) &&
|
Chris@0
|
1282 $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) {
|
Chris@14
|
1283 $namespace .= '\\' . $tokens[$i + 1];
|
Chris@0
|
1284 } else {
|
Chris@0
|
1285 break;
|
Chris@0
|
1286 }
|
Chris@0
|
1287 }
|
Chris@0
|
1288
|
Chris@0
|
1289 return $namespace;
|
Chris@0
|
1290 }
|
Chris@0
|
1291 }
|
Chris@0
|
1292
|
Chris@14
|
1293 class PHP_Token_NS_C extends PHP_Token
|
Chris@14
|
1294 {
|
Chris@14
|
1295 }
|
Chris@14
|
1296
|
Chris@14
|
1297 class PHP_Token_NS_SEPARATOR extends PHP_Token
|
Chris@14
|
1298 {
|
Chris@14
|
1299 }
|
Chris@0
|
1300
|
Chris@0
|
1301 // Tokens introduced in PHP 5.4
|
Chris@14
|
1302 class PHP_Token_CALLABLE extends PHP_Token
|
Chris@14
|
1303 {
|
Chris@14
|
1304 }
|
Chris@14
|
1305
|
Chris@14
|
1306 class PHP_Token_INSTEADOF extends PHP_Token
|
Chris@14
|
1307 {
|
Chris@14
|
1308 }
|
Chris@14
|
1309
|
Chris@14
|
1310 class PHP_Token_TRAIT extends PHP_Token_INTERFACE
|
Chris@14
|
1311 {
|
Chris@14
|
1312 }
|
Chris@14
|
1313
|
Chris@14
|
1314 class PHP_Token_TRAIT_C extends PHP_Token
|
Chris@14
|
1315 {
|
Chris@14
|
1316 }
|
Chris@0
|
1317
|
Chris@0
|
1318 // Tokens introduced in PHP 5.5
|
Chris@14
|
1319 class PHP_Token_FINALLY extends PHP_Token
|
Chris@14
|
1320 {
|
Chris@14
|
1321 }
|
Chris@14
|
1322
|
Chris@14
|
1323 class PHP_Token_YIELD extends PHP_Token
|
Chris@14
|
1324 {
|
Chris@14
|
1325 }
|
Chris@0
|
1326
|
Chris@0
|
1327 // Tokens introduced in PHP 5.6
|
Chris@14
|
1328 class PHP_Token_ELLIPSIS extends PHP_Token
|
Chris@14
|
1329 {
|
Chris@14
|
1330 }
|
Chris@14
|
1331
|
Chris@14
|
1332 class PHP_Token_POW extends PHP_Token
|
Chris@14
|
1333 {
|
Chris@14
|
1334 }
|
Chris@14
|
1335
|
Chris@14
|
1336 class PHP_Token_POW_EQUAL extends PHP_Token
|
Chris@14
|
1337 {
|
Chris@14
|
1338 }
|
Chris@0
|
1339
|
Chris@0
|
1340 // Tokens introduced in PHP 7.0
|
Chris@14
|
1341 class PHP_Token_COALESCE extends PHP_Token
|
Chris@14
|
1342 {
|
Chris@14
|
1343 }
|
Chris@14
|
1344
|
Chris@14
|
1345 class PHP_Token_SPACESHIP extends PHP_Token
|
Chris@14
|
1346 {
|
Chris@14
|
1347 }
|
Chris@14
|
1348
|
Chris@14
|
1349 class PHP_Token_YIELD_FROM extends PHP_Token
|
Chris@14
|
1350 {
|
Chris@14
|
1351 }
|
Chris@0
|
1352
|
Chris@0
|
1353 // Tokens introduced in HackLang / HHVM
|
Chris@14
|
1354 class PHP_Token_ASYNC extends PHP_Token
|
Chris@14
|
1355 {
|
Chris@14
|
1356 }
|
Chris@14
|
1357
|
Chris@14
|
1358 class PHP_Token_AWAIT extends PHP_Token
|
Chris@14
|
1359 {
|
Chris@14
|
1360 }
|
Chris@14
|
1361
|
Chris@14
|
1362 class PHP_Token_COMPILER_HALT_OFFSET extends PHP_Token
|
Chris@14
|
1363 {
|
Chris@14
|
1364 }
|
Chris@14
|
1365
|
Chris@14
|
1366 class PHP_Token_ENUM extends PHP_Token
|
Chris@14
|
1367 {
|
Chris@14
|
1368 }
|
Chris@14
|
1369
|
Chris@14
|
1370 class PHP_Token_EQUALS extends PHP_Token
|
Chris@14
|
1371 {
|
Chris@14
|
1372 }
|
Chris@14
|
1373
|
Chris@14
|
1374 class PHP_Token_IN extends PHP_Token
|
Chris@14
|
1375 {
|
Chris@14
|
1376 }
|
Chris@14
|
1377
|
Chris@14
|
1378 class PHP_Token_JOIN extends PHP_Token
|
Chris@14
|
1379 {
|
Chris@14
|
1380 }
|
Chris@14
|
1381
|
Chris@14
|
1382 class PHP_Token_LAMBDA_ARROW extends PHP_Token
|
Chris@14
|
1383 {
|
Chris@14
|
1384 }
|
Chris@14
|
1385
|
Chris@14
|
1386 class PHP_Token_LAMBDA_CP extends PHP_Token
|
Chris@14
|
1387 {
|
Chris@14
|
1388 }
|
Chris@14
|
1389
|
Chris@14
|
1390 class PHP_Token_LAMBDA_OP extends PHP_Token
|
Chris@14
|
1391 {
|
Chris@14
|
1392 }
|
Chris@14
|
1393
|
Chris@14
|
1394 class PHP_Token_ONUMBER extends PHP_Token
|
Chris@14
|
1395 {
|
Chris@14
|
1396 }
|
Chris@14
|
1397
|
Chris@14
|
1398 class PHP_Token_NULLSAFE_OBJECT_OPERATOR extends PHP_Token
|
Chris@14
|
1399 {
|
Chris@14
|
1400 }
|
Chris@14
|
1401
|
Chris@14
|
1402 class PHP_Token_SHAPE extends PHP_Token
|
Chris@14
|
1403 {
|
Chris@14
|
1404 }
|
Chris@14
|
1405
|
Chris@14
|
1406 class PHP_Token_SUPER extends PHP_Token
|
Chris@14
|
1407 {
|
Chris@14
|
1408 }
|
Chris@14
|
1409
|
Chris@14
|
1410 class PHP_Token_TYPE extends PHP_Token
|
Chris@14
|
1411 {
|
Chris@14
|
1412 }
|
Chris@14
|
1413
|
Chris@14
|
1414 class PHP_Token_TYPELIST_GT extends PHP_Token
|
Chris@14
|
1415 {
|
Chris@14
|
1416 }
|
Chris@14
|
1417
|
Chris@14
|
1418 class PHP_Token_TYPELIST_LT extends PHP_Token
|
Chris@14
|
1419 {
|
Chris@14
|
1420 }
|
Chris@14
|
1421
|
Chris@14
|
1422 class PHP_Token_WHERE extends PHP_Token
|
Chris@14
|
1423 {
|
Chris@14
|
1424 }
|
Chris@14
|
1425
|
Chris@14
|
1426 class PHP_Token_XHP_ATTRIBUTE extends PHP_Token
|
Chris@14
|
1427 {
|
Chris@14
|
1428 }
|
Chris@14
|
1429
|
Chris@14
|
1430 class PHP_Token_XHP_CATEGORY extends PHP_Token
|
Chris@14
|
1431 {
|
Chris@14
|
1432 }
|
Chris@14
|
1433
|
Chris@14
|
1434 class PHP_Token_XHP_CATEGORY_LABEL extends PHP_Token
|
Chris@14
|
1435 {
|
Chris@14
|
1436 }
|
Chris@14
|
1437
|
Chris@14
|
1438 class PHP_Token_XHP_CHILDREN extends PHP_Token
|
Chris@14
|
1439 {
|
Chris@14
|
1440 }
|
Chris@14
|
1441
|
Chris@14
|
1442 class PHP_Token_XHP_LABEL extends PHP_Token
|
Chris@14
|
1443 {
|
Chris@14
|
1444 }
|
Chris@14
|
1445
|
Chris@14
|
1446 class PHP_Token_XHP_REQUIRED extends PHP_Token
|
Chris@14
|
1447 {
|
Chris@14
|
1448 }
|
Chris@14
|
1449
|
Chris@14
|
1450 class PHP_Token_XHP_TAG_GT extends PHP_Token
|
Chris@14
|
1451 {
|
Chris@14
|
1452 }
|
Chris@14
|
1453
|
Chris@14
|
1454 class PHP_Token_XHP_TAG_LT extends PHP_Token
|
Chris@14
|
1455 {
|
Chris@14
|
1456 }
|
Chris@14
|
1457
|
Chris@14
|
1458 class PHP_Token_XHP_TEXT extends PHP_Token
|
Chris@14
|
1459 {
|
Chris@14
|
1460 }
|