annotate vendor/phpunit/php-token-stream/src/Token.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2 /*
Chris@0 3 * This file is part of the PHP_TokenStream package.
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 * @author Sebastian Bergmann <sebastian@phpunit.de>
Chris@0 15 * @copyright Sebastian Bergmann <sebastian@phpunit.de>
Chris@0 16 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
Chris@0 17 * @link http://github.com/sebastianbergmann/php-token-stream/tree
Chris@0 18 * @since Class available since Release 1.0.0
Chris@0 19 */
Chris@0 20 abstract class PHP_Token
Chris@0 21 {
Chris@0 22 /**
Chris@0 23 * @var string
Chris@0 24 */
Chris@0 25 protected $text;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * @var integer
Chris@0 29 */
Chris@0 30 protected $line;
Chris@0 31
Chris@0 32 /**
Chris@0 33 * @var PHP_Token_Stream
Chris@0 34 */
Chris@0 35 protected $tokenStream;
Chris@0 36
Chris@0 37 /**
Chris@0 38 * @var integer
Chris@0 39 */
Chris@0 40 protected $id;
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Constructor.
Chris@0 44 *
Chris@0 45 * @param string $text
Chris@0 46 * @param integer $line
Chris@0 47 * @param PHP_Token_Stream $tokenStream
Chris@0 48 * @param integer $id
Chris@0 49 */
Chris@0 50 public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id)
Chris@0 51 {
Chris@0 52 $this->text = $text;
Chris@0 53 $this->line = $line;
Chris@0 54 $this->tokenStream = $tokenStream;
Chris@0 55 $this->id = $id;
Chris@0 56 }
Chris@0 57
Chris@0 58 /**
Chris@0 59 * @return string
Chris@0 60 */
Chris@0 61 public function __toString()
Chris@0 62 {
Chris@0 63 return $this->text;
Chris@0 64 }
Chris@0 65
Chris@0 66 /**
Chris@0 67 * @return integer
Chris@0 68 */
Chris@0 69 public function getLine()
Chris@0 70 {
Chris@0 71 return $this->line;
Chris@0 72 }
Chris@0 73 }
Chris@0 74
Chris@0 75 abstract class PHP_TokenWithScope extends PHP_Token
Chris@0 76 {
Chris@0 77 /**
Chris@0 78 * @var integer
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@0 123 return (string)$tokens[$i];
Chris@0 124 }
Chris@0 125 }
Chris@0 126
Chris@0 127 /**
Chris@0 128 * @return integer
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@0 165 * @return integer
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@0 206 $keywords = array();
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@0 271 if ($tokens[$this->id+2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) {
Chris@0 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
Chris@0 281 class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility
Chris@0 282 {
Chris@0 283 /**
Chris@0 284 * @var array
Chris@0 285 */
Chris@0 286 protected $arguments;
Chris@0 287
Chris@0 288 /**
Chris@0 289 * @var integer
Chris@0 290 */
Chris@0 291 protected $ccn;
Chris@0 292
Chris@0 293 /**
Chris@0 294 * @var string
Chris@0 295 */
Chris@0 296 protected $name;
Chris@0 297
Chris@0 298 /**
Chris@0 299 * @var string
Chris@0 300 */
Chris@0 301 protected $signature;
Chris@0 302
Chris@0 303 /**
Chris@0 304 * @return array
Chris@0 305 */
Chris@0 306 public function getArguments()
Chris@0 307 {
Chris@0 308 if ($this->arguments !== null) {
Chris@0 309 return $this->arguments;
Chris@0 310 }
Chris@0 311
Chris@0 312 $this->arguments = array();
Chris@0 313 $tokens = $this->tokenStream->tokens();
Chris@0 314 $typeDeclaration = null;
Chris@0 315
Chris@0 316 // Search for first token inside brackets
Chris@0 317 $i = $this->id + 2;
Chris@0 318
Chris@0 319 while (!$tokens[$i-1] instanceof PHP_Token_OPEN_BRACKET) {
Chris@0 320 $i++;
Chris@0 321 }
Chris@0 322
Chris@0 323 while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) {
Chris@0 324 if ($tokens[$i] instanceof PHP_Token_STRING) {
Chris@0 325 $typeDeclaration = (string)$tokens[$i];
Chris@0 326 } elseif ($tokens[$i] instanceof PHP_Token_VARIABLE) {
Chris@0 327 $this->arguments[(string)$tokens[$i]] = $typeDeclaration;
Chris@0 328 $typeDeclaration = null;
Chris@0 329 }
Chris@0 330
Chris@0 331 $i++;
Chris@0 332 }
Chris@0 333
Chris@0 334 return $this->arguments;
Chris@0 335 }
Chris@0 336
Chris@0 337 /**
Chris@0 338 * @return string
Chris@0 339 */
Chris@0 340 public function getName()
Chris@0 341 {
Chris@0 342 if ($this->name !== null) {
Chris@0 343 return $this->name;
Chris@0 344 }
Chris@0 345
Chris@0 346 $tokens = $this->tokenStream->tokens();
Chris@0 347
Chris@0 348 for ($i = $this->id + 1; $i < count($tokens); $i++) {
Chris@0 349 if ($tokens[$i] instanceof PHP_Token_STRING) {
Chris@0 350 $this->name = (string)$tokens[$i];
Chris@0 351 break;
Chris@0 352 } elseif ($tokens[$i] instanceof PHP_Token_AMPERSAND &&
Chris@0 353 $tokens[$i+1] instanceof PHP_Token_STRING) {
Chris@0 354 $this->name = (string)$tokens[$i+1];
Chris@0 355 break;
Chris@0 356 } elseif ($tokens[$i] instanceof PHP_Token_OPEN_BRACKET) {
Chris@0 357 $this->name = 'anonymous function';
Chris@0 358 break;
Chris@0 359 }
Chris@0 360 }
Chris@0 361
Chris@0 362 if ($this->name != 'anonymous function') {
Chris@0 363 for ($i = $this->id; $i; --$i) {
Chris@0 364 if ($tokens[$i] instanceof PHP_Token_NAMESPACE) {
Chris@0 365 $this->name = $tokens[$i]->getName() . '\\' . $this->name;
Chris@0 366 break;
Chris@0 367 }
Chris@0 368
Chris@0 369 if ($tokens[$i] instanceof PHP_Token_INTERFACE) {
Chris@0 370 break;
Chris@0 371 }
Chris@0 372 }
Chris@0 373 }
Chris@0 374
Chris@0 375 return $this->name;
Chris@0 376 }
Chris@0 377
Chris@0 378 /**
Chris@0 379 * @return integer
Chris@0 380 */
Chris@0 381 public function getCCN()
Chris@0 382 {
Chris@0 383 if ($this->ccn !== null) {
Chris@0 384 return $this->ccn;
Chris@0 385 }
Chris@0 386
Chris@0 387 $this->ccn = 1;
Chris@0 388 $end = $this->getEndTokenId();
Chris@0 389 $tokens = $this->tokenStream->tokens();
Chris@0 390
Chris@0 391 for ($i = $this->id; $i <= $end; $i++) {
Chris@0 392 switch (get_class($tokens[$i])) {
Chris@0 393 case 'PHP_Token_IF':
Chris@0 394 case 'PHP_Token_ELSEIF':
Chris@0 395 case 'PHP_Token_FOR':
Chris@0 396 case 'PHP_Token_FOREACH':
Chris@0 397 case 'PHP_Token_WHILE':
Chris@0 398 case 'PHP_Token_CASE':
Chris@0 399 case 'PHP_Token_CATCH':
Chris@0 400 case 'PHP_Token_BOOLEAN_AND':
Chris@0 401 case 'PHP_Token_LOGICAL_AND':
Chris@0 402 case 'PHP_Token_BOOLEAN_OR':
Chris@0 403 case 'PHP_Token_LOGICAL_OR':
Chris@0 404 case 'PHP_Token_QUESTION_MARK':
Chris@0 405 $this->ccn++;
Chris@0 406 break;
Chris@0 407 }
Chris@0 408 }
Chris@0 409
Chris@0 410 return $this->ccn;
Chris@0 411 }
Chris@0 412
Chris@0 413 /**
Chris@0 414 * @return string
Chris@0 415 */
Chris@0 416 public function getSignature()
Chris@0 417 {
Chris@0 418 if ($this->signature !== null) {
Chris@0 419 return $this->signature;
Chris@0 420 }
Chris@0 421
Chris@0 422 if ($this->getName() == 'anonymous function') {
Chris@0 423 $this->signature = 'anonymous function';
Chris@0 424 $i = $this->id + 1;
Chris@0 425 } else {
Chris@0 426 $this->signature = '';
Chris@0 427 $i = $this->id + 2;
Chris@0 428 }
Chris@0 429
Chris@0 430 $tokens = $this->tokenStream->tokens();
Chris@0 431
Chris@0 432 while (isset($tokens[$i]) &&
Chris@0 433 !$tokens[$i] instanceof PHP_Token_OPEN_CURLY &&
Chris@0 434 !$tokens[$i] instanceof PHP_Token_SEMICOLON) {
Chris@0 435 $this->signature .= $tokens[$i++];
Chris@0 436 }
Chris@0 437
Chris@0 438 $this->signature = trim($this->signature);
Chris@0 439
Chris@0 440 return $this->signature;
Chris@0 441 }
Chris@0 442 }
Chris@0 443
Chris@0 444 class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility
Chris@0 445 {
Chris@0 446 /**
Chris@0 447 * @var array
Chris@0 448 */
Chris@0 449 protected $interfaces;
Chris@0 450
Chris@0 451 /**
Chris@0 452 * @return string
Chris@0 453 */
Chris@0 454 public function getName()
Chris@0 455 {
Chris@0 456 return (string)$this->tokenStream[$this->id + 2];
Chris@0 457 }
Chris@0 458
Chris@0 459 /**
Chris@0 460 * @return boolean
Chris@0 461 */
Chris@0 462 public function hasParent()
Chris@0 463 {
Chris@0 464 return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS;
Chris@0 465 }
Chris@0 466
Chris@0 467 /**
Chris@0 468 * @return array
Chris@0 469 */
Chris@0 470 public function getPackage()
Chris@0 471 {
Chris@0 472 $className = $this->getName();
Chris@0 473 $docComment = $this->getDocblock();
Chris@0 474
Chris@0 475 $result = array(
Chris@0 476 'namespace' => '',
Chris@0 477 'fullPackage' => '',
Chris@0 478 'category' => '',
Chris@0 479 'package' => '',
Chris@0 480 'subpackage' => ''
Chris@0 481 );
Chris@0 482
Chris@0 483 for ($i = $this->id; $i; --$i) {
Chris@0 484 if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) {
Chris@0 485 $result['namespace'] = $this->tokenStream[$i]->getName();
Chris@0 486 break;
Chris@0 487 }
Chris@0 488 }
Chris@0 489
Chris@0 490 if (preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) {
Chris@0 491 $result['category'] = $matches[1];
Chris@0 492 }
Chris@0 493
Chris@0 494 if (preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) {
Chris@0 495 $result['package'] = $matches[1];
Chris@0 496 $result['fullPackage'] = $matches[1];
Chris@0 497 }
Chris@0 498
Chris@0 499 if (preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) {
Chris@0 500 $result['subpackage'] = $matches[1];
Chris@0 501 $result['fullPackage'] .= '.' . $matches[1];
Chris@0 502 }
Chris@0 503
Chris@0 504 if (empty($result['fullPackage'])) {
Chris@0 505 $result['fullPackage'] = $this->arrayToName(
Chris@0 506 explode('_', str_replace('\\', '_', $className)),
Chris@0 507 '.'
Chris@0 508 );
Chris@0 509 }
Chris@0 510
Chris@0 511 return $result;
Chris@0 512 }
Chris@0 513
Chris@0 514 /**
Chris@0 515 * @param array $parts
Chris@0 516 * @param string $join
Chris@0 517 * @return string
Chris@0 518 */
Chris@0 519 protected function arrayToName(array $parts, $join = '\\')
Chris@0 520 {
Chris@0 521 $result = '';
Chris@0 522
Chris@0 523 if (count($parts) > 1) {
Chris@0 524 array_pop($parts);
Chris@0 525
Chris@0 526 $result = join($join, $parts);
Chris@0 527 }
Chris@0 528
Chris@0 529 return $result;
Chris@0 530 }
Chris@0 531
Chris@0 532 /**
Chris@0 533 * @return boolean|string
Chris@0 534 */
Chris@0 535 public function getParent()
Chris@0 536 {
Chris@0 537 if (!$this->hasParent()) {
Chris@0 538 return false;
Chris@0 539 }
Chris@0 540
Chris@0 541 $i = $this->id + 6;
Chris@0 542 $tokens = $this->tokenStream->tokens();
Chris@0 543 $className = (string)$tokens[$i];
Chris@0 544
Chris@0 545 while (isset($tokens[$i+1]) &&
Chris@0 546 !$tokens[$i+1] instanceof PHP_Token_WHITESPACE) {
Chris@0 547 $className .= (string)$tokens[++$i];
Chris@0 548 }
Chris@0 549
Chris@0 550 return $className;
Chris@0 551 }
Chris@0 552
Chris@0 553 /**
Chris@0 554 * @return boolean
Chris@0 555 */
Chris@0 556 public function hasInterfaces()
Chris@0 557 {
Chris@0 558 return (isset($this->tokenStream[$this->id + 4]) &&
Chris@0 559 $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) ||
Chris@0 560 (isset($this->tokenStream[$this->id + 8]) &&
Chris@0 561 $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS);
Chris@0 562 }
Chris@0 563
Chris@0 564 /**
Chris@0 565 * @return array|boolean
Chris@0 566 */
Chris@0 567 public function getInterfaces()
Chris@0 568 {
Chris@0 569 if ($this->interfaces !== null) {
Chris@0 570 return $this->interfaces;
Chris@0 571 }
Chris@0 572
Chris@0 573 if (!$this->hasInterfaces()) {
Chris@0 574 return ($this->interfaces = false);
Chris@0 575 }
Chris@0 576
Chris@0 577 if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) {
Chris@0 578 $i = $this->id + 3;
Chris@0 579 } else {
Chris@0 580 $i = $this->id + 7;
Chris@0 581 }
Chris@0 582
Chris@0 583 $tokens = $this->tokenStream->tokens();
Chris@0 584
Chris@0 585 while (!$tokens[$i+1] instanceof PHP_Token_OPEN_CURLY) {
Chris@0 586 $i++;
Chris@0 587
Chris@0 588 if ($tokens[$i] instanceof PHP_Token_STRING) {
Chris@0 589 $this->interfaces[] = (string)$tokens[$i];
Chris@0 590 }
Chris@0 591 }
Chris@0 592
Chris@0 593 return $this->interfaces;
Chris@0 594 }
Chris@0 595 }
Chris@0 596
Chris@0 597 class PHP_Token_ABSTRACT extends PHP_Token {}
Chris@0 598 class PHP_Token_AMPERSAND extends PHP_Token {}
Chris@0 599 class PHP_Token_AND_EQUAL extends PHP_Token {}
Chris@0 600 class PHP_Token_ARRAY extends PHP_Token {}
Chris@0 601 class PHP_Token_ARRAY_CAST extends PHP_Token {}
Chris@0 602 class PHP_Token_AS extends PHP_Token {}
Chris@0 603 class PHP_Token_AT extends PHP_Token {}
Chris@0 604 class PHP_Token_BACKTICK extends PHP_Token {}
Chris@0 605 class PHP_Token_BAD_CHARACTER extends PHP_Token {}
Chris@0 606 class PHP_Token_BOOLEAN_AND extends PHP_Token {}
Chris@0 607 class PHP_Token_BOOLEAN_OR extends PHP_Token {}
Chris@0 608 class PHP_Token_BOOL_CAST extends PHP_Token {}
Chris@0 609 class PHP_Token_BREAK extends PHP_Token {}
Chris@0 610 class PHP_Token_CARET extends PHP_Token {}
Chris@0 611 class PHP_Token_CASE extends PHP_Token {}
Chris@0 612 class PHP_Token_CATCH extends PHP_Token {}
Chris@0 613 class PHP_Token_CHARACTER extends PHP_Token {}
Chris@0 614
Chris@0 615 class PHP_Token_CLASS extends PHP_Token_INTERFACE
Chris@0 616 {
Chris@0 617 /**
Chris@0 618 * @return string
Chris@0 619 */
Chris@0 620 public function getName()
Chris@0 621 {
Chris@0 622 $next = $this->tokenStream[$this->id + 1];
Chris@0 623
Chris@0 624 if ($next instanceof PHP_Token_WHITESPACE) {
Chris@0 625 $next = $this->tokenStream[$this->id + 2];
Chris@0 626 }
Chris@0 627
Chris@0 628 if ($next instanceof PHP_Token_STRING) {
Chris@0 629 return (string) $next;
Chris@0 630 }
Chris@0 631
Chris@0 632 if ($next instanceof PHP_Token_OPEN_CURLY ||
Chris@0 633 $next instanceof PHP_Token_EXTENDS ||
Chris@0 634 $next instanceof PHP_Token_IMPLEMENTS) {
Chris@0 635 return 'anonymous class';
Chris@0 636 }
Chris@0 637 }
Chris@0 638 }
Chris@0 639
Chris@0 640 class PHP_Token_CLASS_C extends PHP_Token {}
Chris@0 641 class PHP_Token_CLASS_NAME_CONSTANT extends PHP_Token {}
Chris@0 642 class PHP_Token_CLONE extends PHP_Token {}
Chris@0 643 class PHP_Token_CLOSE_BRACKET extends PHP_Token {}
Chris@0 644 class PHP_Token_CLOSE_CURLY extends PHP_Token {}
Chris@0 645 class PHP_Token_CLOSE_SQUARE extends PHP_Token {}
Chris@0 646 class PHP_Token_CLOSE_TAG extends PHP_Token {}
Chris@0 647 class PHP_Token_COLON extends PHP_Token {}
Chris@0 648 class PHP_Token_COMMA extends PHP_Token {}
Chris@0 649 class PHP_Token_COMMENT extends PHP_Token {}
Chris@0 650 class PHP_Token_CONCAT_EQUAL extends PHP_Token {}
Chris@0 651 class PHP_Token_CONST extends PHP_Token {}
Chris@0 652 class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token {}
Chris@0 653 class PHP_Token_CONTINUE extends PHP_Token {}
Chris@0 654 class PHP_Token_CURLY_OPEN extends PHP_Token {}
Chris@0 655 class PHP_Token_DEC extends PHP_Token {}
Chris@0 656 class PHP_Token_DECLARE extends PHP_Token {}
Chris@0 657 class PHP_Token_DEFAULT extends PHP_Token {}
Chris@0 658 class PHP_Token_DIV extends PHP_Token {}
Chris@0 659 class PHP_Token_DIV_EQUAL extends PHP_Token {}
Chris@0 660 class PHP_Token_DNUMBER extends PHP_Token {}
Chris@0 661 class PHP_Token_DO extends PHP_Token {}
Chris@0 662 class PHP_Token_DOC_COMMENT extends PHP_Token {}
Chris@0 663 class PHP_Token_DOLLAR extends PHP_Token {}
Chris@0 664 class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token {}
Chris@0 665 class PHP_Token_DOT extends PHP_Token {}
Chris@0 666 class PHP_Token_DOUBLE_ARROW extends PHP_Token {}
Chris@0 667 class PHP_Token_DOUBLE_CAST extends PHP_Token {}
Chris@0 668 class PHP_Token_DOUBLE_COLON extends PHP_Token {}
Chris@0 669 class PHP_Token_DOUBLE_QUOTES extends PHP_Token {}
Chris@0 670 class PHP_Token_ECHO extends PHP_Token {}
Chris@0 671 class PHP_Token_ELSE extends PHP_Token {}
Chris@0 672 class PHP_Token_ELSEIF extends PHP_Token {}
Chris@0 673 class PHP_Token_EMPTY extends PHP_Token {}
Chris@0 674 class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token {}
Chris@0 675 class PHP_Token_ENDDECLARE extends PHP_Token {}
Chris@0 676 class PHP_Token_ENDFOR extends PHP_Token {}
Chris@0 677 class PHP_Token_ENDFOREACH extends PHP_Token {}
Chris@0 678 class PHP_Token_ENDIF extends PHP_Token {}
Chris@0 679 class PHP_Token_ENDSWITCH extends PHP_Token {}
Chris@0 680 class PHP_Token_ENDWHILE extends PHP_Token {}
Chris@0 681 class PHP_Token_END_HEREDOC extends PHP_Token {}
Chris@0 682 class PHP_Token_EQUAL extends PHP_Token {}
Chris@0 683 class PHP_Token_EVAL extends PHP_Token {}
Chris@0 684 class PHP_Token_EXCLAMATION_MARK extends PHP_Token {}
Chris@0 685 class PHP_Token_EXIT extends PHP_Token {}
Chris@0 686 class PHP_Token_EXTENDS extends PHP_Token {}
Chris@0 687 class PHP_Token_FILE extends PHP_Token {}
Chris@0 688 class PHP_Token_FINAL extends PHP_Token {}
Chris@0 689 class PHP_Token_FOR extends PHP_Token {}
Chris@0 690 class PHP_Token_FOREACH extends PHP_Token {}
Chris@0 691 class PHP_Token_FUNC_C extends PHP_Token {}
Chris@0 692 class PHP_Token_GLOBAL extends PHP_Token {}
Chris@0 693 class PHP_Token_GT extends PHP_Token {}
Chris@0 694 class PHP_Token_IF extends PHP_Token {}
Chris@0 695 class PHP_Token_IMPLEMENTS extends PHP_Token {}
Chris@0 696 class PHP_Token_INC extends PHP_Token {}
Chris@0 697 class PHP_Token_INCLUDE extends PHP_Token_Includes {}
Chris@0 698 class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes {}
Chris@0 699 class PHP_Token_INLINE_HTML extends PHP_Token {}
Chris@0 700 class PHP_Token_INSTANCEOF extends PHP_Token {}
Chris@0 701 class PHP_Token_INT_CAST extends PHP_Token {}
Chris@0 702 class PHP_Token_ISSET extends PHP_Token {}
Chris@0 703 class PHP_Token_IS_EQUAL extends PHP_Token {}
Chris@0 704 class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token {}
Chris@0 705 class PHP_Token_IS_IDENTICAL extends PHP_Token {}
Chris@0 706 class PHP_Token_IS_NOT_EQUAL extends PHP_Token {}
Chris@0 707 class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token {}
Chris@0 708 class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token {}
Chris@0 709 class PHP_Token_LINE extends PHP_Token {}
Chris@0 710 class PHP_Token_LIST extends PHP_Token {}
Chris@0 711 class PHP_Token_LNUMBER extends PHP_Token {}
Chris@0 712 class PHP_Token_LOGICAL_AND extends PHP_Token {}
Chris@0 713 class PHP_Token_LOGICAL_OR extends PHP_Token {}
Chris@0 714 class PHP_Token_LOGICAL_XOR extends PHP_Token {}
Chris@0 715 class PHP_Token_LT extends PHP_Token {}
Chris@0 716 class PHP_Token_METHOD_C extends PHP_Token {}
Chris@0 717 class PHP_Token_MINUS extends PHP_Token {}
Chris@0 718 class PHP_Token_MINUS_EQUAL extends PHP_Token {}
Chris@0 719 class PHP_Token_MOD_EQUAL extends PHP_Token {}
Chris@0 720 class PHP_Token_MULT extends PHP_Token {}
Chris@0 721 class PHP_Token_MUL_EQUAL extends PHP_Token {}
Chris@0 722 class PHP_Token_NEW extends PHP_Token {}
Chris@0 723 class PHP_Token_NUM_STRING extends PHP_Token {}
Chris@0 724 class PHP_Token_OBJECT_CAST extends PHP_Token {}
Chris@0 725 class PHP_Token_OBJECT_OPERATOR extends PHP_Token {}
Chris@0 726 class PHP_Token_OPEN_BRACKET extends PHP_Token {}
Chris@0 727 class PHP_Token_OPEN_CURLY extends PHP_Token {}
Chris@0 728 class PHP_Token_OPEN_SQUARE extends PHP_Token {}
Chris@0 729 class PHP_Token_OPEN_TAG extends PHP_Token {}
Chris@0 730 class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token {}
Chris@0 731 class PHP_Token_OR_EQUAL extends PHP_Token {}
Chris@0 732 class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token {}
Chris@0 733 class PHP_Token_PERCENT extends PHP_Token {}
Chris@0 734 class PHP_Token_PIPE extends PHP_Token {}
Chris@0 735 class PHP_Token_PLUS extends PHP_Token {}
Chris@0 736 class PHP_Token_PLUS_EQUAL extends PHP_Token {}
Chris@0 737 class PHP_Token_PRINT extends PHP_Token {}
Chris@0 738 class PHP_Token_PRIVATE extends PHP_Token {}
Chris@0 739 class PHP_Token_PROTECTED extends PHP_Token {}
Chris@0 740 class PHP_Token_PUBLIC extends PHP_Token {}
Chris@0 741 class PHP_Token_QUESTION_MARK extends PHP_Token {}
Chris@0 742 class PHP_Token_REQUIRE extends PHP_Token_Includes {}
Chris@0 743 class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes {}
Chris@0 744 class PHP_Token_RETURN extends PHP_Token {}
Chris@0 745 class PHP_Token_SEMICOLON extends PHP_Token {}
Chris@0 746 class PHP_Token_SL extends PHP_Token {}
Chris@0 747 class PHP_Token_SL_EQUAL extends PHP_Token {}
Chris@0 748 class PHP_Token_SR extends PHP_Token {}
Chris@0 749 class PHP_Token_SR_EQUAL extends PHP_Token {}
Chris@0 750 class PHP_Token_START_HEREDOC extends PHP_Token {}
Chris@0 751 class PHP_Token_STATIC extends PHP_Token {}
Chris@0 752 class PHP_Token_STRING extends PHP_Token {}
Chris@0 753 class PHP_Token_STRING_CAST extends PHP_Token {}
Chris@0 754 class PHP_Token_STRING_VARNAME extends PHP_Token {}
Chris@0 755 class PHP_Token_SWITCH extends PHP_Token {}
Chris@0 756 class PHP_Token_THROW extends PHP_Token {}
Chris@0 757 class PHP_Token_TILDE extends PHP_Token {}
Chris@0 758 class PHP_Token_TRY extends PHP_Token {}
Chris@0 759 class PHP_Token_UNSET extends PHP_Token {}
Chris@0 760 class PHP_Token_UNSET_CAST extends PHP_Token {}
Chris@0 761 class PHP_Token_USE extends PHP_Token {}
Chris@0 762 class PHP_Token_USE_FUNCTION extends PHP_Token {}
Chris@0 763 class PHP_Token_VAR extends PHP_Token {}
Chris@0 764 class PHP_Token_VARIABLE extends PHP_Token {}
Chris@0 765 class PHP_Token_WHILE extends PHP_Token {}
Chris@0 766 class PHP_Token_WHITESPACE extends PHP_Token {}
Chris@0 767 class PHP_Token_XOR_EQUAL extends PHP_Token {}
Chris@0 768
Chris@0 769 // Tokens introduced in PHP 5.1
Chris@0 770 class PHP_Token_HALT_COMPILER extends PHP_Token {}
Chris@0 771
Chris@0 772 // Tokens introduced in PHP 5.3
Chris@0 773 class PHP_Token_DIR extends PHP_Token {}
Chris@0 774 class PHP_Token_GOTO extends PHP_Token {}
Chris@0 775
Chris@0 776 class PHP_Token_NAMESPACE extends PHP_TokenWithScope
Chris@0 777 {
Chris@0 778 /**
Chris@0 779 * @return string
Chris@0 780 */
Chris@0 781 public function getName()
Chris@0 782 {
Chris@0 783 $tokens = $this->tokenStream->tokens();
Chris@0 784 $namespace = (string)$tokens[$this->id+2];
Chris@0 785
Chris@0 786 for ($i = $this->id + 3;; $i += 2) {
Chris@0 787 if (isset($tokens[$i]) &&
Chris@0 788 $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) {
Chris@0 789 $namespace .= '\\' . $tokens[$i+1];
Chris@0 790 } else {
Chris@0 791 break;
Chris@0 792 }
Chris@0 793 }
Chris@0 794
Chris@0 795 return $namespace;
Chris@0 796 }
Chris@0 797 }
Chris@0 798
Chris@0 799 class PHP_Token_NS_C extends PHP_Token {}
Chris@0 800 class PHP_Token_NS_SEPARATOR extends PHP_Token {}
Chris@0 801
Chris@0 802 // Tokens introduced in PHP 5.4
Chris@0 803 class PHP_Token_CALLABLE extends PHP_Token {}
Chris@0 804 class PHP_Token_INSTEADOF extends PHP_Token {}
Chris@0 805 class PHP_Token_TRAIT extends PHP_Token_INTERFACE {}
Chris@0 806 class PHP_Token_TRAIT_C extends PHP_Token {}
Chris@0 807
Chris@0 808 // Tokens introduced in PHP 5.5
Chris@0 809 class PHP_Token_FINALLY extends PHP_Token {}
Chris@0 810 class PHP_Token_YIELD extends PHP_Token {}
Chris@0 811
Chris@0 812 // Tokens introduced in PHP 5.6
Chris@0 813 class PHP_Token_ELLIPSIS extends PHP_Token {}
Chris@0 814 class PHP_Token_POW extends PHP_Token {}
Chris@0 815 class PHP_Token_POW_EQUAL extends PHP_Token {}
Chris@0 816
Chris@0 817 // Tokens introduced in PHP 7.0
Chris@0 818 class PHP_Token_COALESCE extends PHP_Token {}
Chris@0 819 class PHP_Token_SPACESHIP extends PHP_Token {}
Chris@0 820 class PHP_Token_YIELD_FROM extends PHP_Token {}
Chris@0 821
Chris@0 822 // Tokens introduced in HackLang / HHVM
Chris@0 823 class PHP_Token_ASYNC extends PHP_Token {}
Chris@0 824 class PHP_Token_AWAIT extends PHP_Token {}
Chris@0 825 class PHP_Token_COMPILER_HALT_OFFSET extends PHP_Token {}
Chris@0 826 class PHP_Token_ENUM extends PHP_Token {}
Chris@0 827 class PHP_Token_EQUALS extends PHP_Token {}
Chris@0 828 class PHP_Token_IN extends PHP_Token {}
Chris@0 829 class PHP_Token_JOIN extends PHP_Token {}
Chris@0 830 class PHP_Token_LAMBDA_ARROW extends PHP_Token {}
Chris@0 831 class PHP_Token_LAMBDA_CP extends PHP_Token {}
Chris@0 832 class PHP_Token_LAMBDA_OP extends PHP_Token {}
Chris@0 833 class PHP_Token_ONUMBER extends PHP_Token {}
Chris@0 834 class PHP_Token_NULLSAFE_OBJECT_OPERATOR extends PHP_Token {}
Chris@0 835 class PHP_Token_SHAPE extends PHP_Token {}
Chris@0 836 class PHP_Token_SUPER extends PHP_Token {}
Chris@0 837 class PHP_Token_TYPE extends PHP_Token {}
Chris@0 838 class PHP_Token_TYPELIST_GT extends PHP_Token {}
Chris@0 839 class PHP_Token_TYPELIST_LT extends PHP_Token {}
Chris@0 840 class PHP_Token_WHERE extends PHP_Token {}
Chris@0 841 class PHP_Token_XHP_ATTRIBUTE extends PHP_Token {}
Chris@0 842 class PHP_Token_XHP_CATEGORY extends PHP_Token {}
Chris@0 843 class PHP_Token_XHP_CATEGORY_LABEL extends PHP_Token {}
Chris@0 844 class PHP_Token_XHP_CHILDREN extends PHP_Token {}
Chris@0 845 class PHP_Token_XHP_LABEL extends PHP_Token {}
Chris@0 846 class PHP_Token_XHP_REQUIRED extends PHP_Token {}
Chris@0 847 class PHP_Token_XHP_TAG_GT extends PHP_Token {}
Chris@0 848 class PHP_Token_XHP_TAG_LT extends PHP_Token {}
Chris@0 849 class PHP_Token_XHP_TEXT extends PHP_Token {}