PageRenderTime 40ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/phpunit/php-token-stream/src/Token.php

https://gitlab.com/btkm/correct_fb
PHP | 846 lines | 646 code | 83 blank | 117 comment | 51 complexity | 5a2550ab83f5420edc337c1ef8e6f780 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the PHP_TokenStream package.
  4. *
  5. * (c) Sebastian Bergmann <sebastian@phpunit.de>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. /**
  11. * A PHP token.
  12. *
  13. * @author Sebastian Bergmann <sebastian@phpunit.de>
  14. * @copyright Sebastian Bergmann <sebastian@phpunit.de>
  15. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  16. * @link http://github.com/sebastianbergmann/php-token-stream/tree
  17. * @since Class available since Release 1.0.0
  18. */
  19. abstract class PHP_Token
  20. {
  21. /**
  22. * @var string
  23. */
  24. protected $text;
  25. /**
  26. * @var integer
  27. */
  28. protected $line;
  29. /**
  30. * @var PHP_Token_Stream
  31. */
  32. protected $tokenStream;
  33. /**
  34. * @var integer
  35. */
  36. protected $id;
  37. /**
  38. * Constructor.
  39. *
  40. * @param string $text
  41. * @param integer $line
  42. * @param PHP_Token_Stream $tokenStream
  43. * @param integer $id
  44. */
  45. public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id)
  46. {
  47. $this->text = $text;
  48. $this->line = $line;
  49. $this->tokenStream = $tokenStream;
  50. $this->id = $id;
  51. }
  52. /**
  53. * @return string
  54. */
  55. public function __toString()
  56. {
  57. return $this->text;
  58. }
  59. /**
  60. * @return integer
  61. */
  62. public function getLine()
  63. {
  64. return $this->line;
  65. }
  66. }
  67. abstract class PHP_TokenWithScope extends PHP_Token
  68. {
  69. /**
  70. * @var integer
  71. */
  72. protected $endTokenId;
  73. /**
  74. * Get the docblock for this token
  75. *
  76. * This method will fetch the docblock belonging to the current token. The
  77. * docblock must be placed on the line directly above the token to be
  78. * recognized.
  79. *
  80. * @return string|null Returns the docblock as a string if found
  81. */
  82. public function getDocblock()
  83. {
  84. $tokens = $this->tokenStream->tokens();
  85. $currentLineNumber = $tokens[$this->id]->getLine();
  86. $prevLineNumber = $currentLineNumber - 1;
  87. for ($i = $this->id - 1; $i; $i--) {
  88. if (!isset($tokens[$i])) {
  89. return;
  90. }
  91. if ($tokens[$i] instanceof PHP_Token_FUNCTION ||
  92. $tokens[$i] instanceof PHP_Token_CLASS ||
  93. $tokens[$i] instanceof PHP_Token_TRAIT) {
  94. // Some other trait, class or function, no docblock can be
  95. // used for the current token
  96. break;
  97. }
  98. $line = $tokens[$i]->getLine();
  99. if ($line == $currentLineNumber ||
  100. ($line == $prevLineNumber &&
  101. $tokens[$i] instanceof PHP_Token_WHITESPACE)) {
  102. continue;
  103. }
  104. if ($line < $currentLineNumber &&
  105. !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) {
  106. break;
  107. }
  108. return (string)$tokens[$i];
  109. }
  110. }
  111. /**
  112. * @return integer
  113. */
  114. public function getEndTokenId()
  115. {
  116. $block = 0;
  117. $i = $this->id;
  118. $tokens = $this->tokenStream->tokens();
  119. while ($this->endTokenId === null && isset($tokens[$i])) {
  120. if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY ||
  121. $tokens[$i] instanceof PHP_Token_CURLY_OPEN) {
  122. $block++;
  123. } elseif ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) {
  124. $block--;
  125. if ($block === 0) {
  126. $this->endTokenId = $i;
  127. }
  128. } elseif (($this instanceof PHP_Token_FUNCTION ||
  129. $this instanceof PHP_Token_NAMESPACE) &&
  130. $tokens[$i] instanceof PHP_Token_SEMICOLON) {
  131. if ($block === 0) {
  132. $this->endTokenId = $i;
  133. }
  134. }
  135. $i++;
  136. }
  137. if ($this->endTokenId === null) {
  138. $this->endTokenId = $this->id;
  139. }
  140. return $this->endTokenId;
  141. }
  142. /**
  143. * @return integer
  144. */
  145. public function getEndLine()
  146. {
  147. return $this->tokenStream[$this->getEndTokenId()]->getLine();
  148. }
  149. }
  150. abstract class PHP_TokenWithScopeAndVisibility extends PHP_TokenWithScope
  151. {
  152. /**
  153. * @return string
  154. */
  155. public function getVisibility()
  156. {
  157. $tokens = $this->tokenStream->tokens();
  158. for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
  159. if (isset($tokens[$i]) &&
  160. ($tokens[$i] instanceof PHP_Token_PRIVATE ||
  161. $tokens[$i] instanceof PHP_Token_PROTECTED ||
  162. $tokens[$i] instanceof PHP_Token_PUBLIC)) {
  163. return strtolower(
  164. str_replace('PHP_Token_', '', get_class($tokens[$i]))
  165. );
  166. }
  167. if (isset($tokens[$i]) &&
  168. !($tokens[$i] instanceof PHP_Token_STATIC ||
  169. $tokens[$i] instanceof PHP_Token_FINAL ||
  170. $tokens[$i] instanceof PHP_Token_ABSTRACT)) {
  171. // no keywords; stop visibility search
  172. break;
  173. }
  174. }
  175. }
  176. /**
  177. * @return string
  178. */
  179. public function getKeywords()
  180. {
  181. $keywords = array();
  182. $tokens = $this->tokenStream->tokens();
  183. for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
  184. if (isset($tokens[$i]) &&
  185. ($tokens[$i] instanceof PHP_Token_PRIVATE ||
  186. $tokens[$i] instanceof PHP_Token_PROTECTED ||
  187. $tokens[$i] instanceof PHP_Token_PUBLIC)) {
  188. continue;
  189. }
  190. if (isset($tokens[$i]) &&
  191. ($tokens[$i] instanceof PHP_Token_STATIC ||
  192. $tokens[$i] instanceof PHP_Token_FINAL ||
  193. $tokens[$i] instanceof PHP_Token_ABSTRACT)) {
  194. $keywords[] = strtolower(
  195. str_replace('PHP_Token_', '', get_class($tokens[$i]))
  196. );
  197. }
  198. }
  199. return implode(',', $keywords);
  200. }
  201. }
  202. abstract class PHP_Token_Includes extends PHP_Token
  203. {
  204. /**
  205. * @var string
  206. */
  207. protected $name;
  208. /**
  209. * @var string
  210. */
  211. protected $type;
  212. /**
  213. * @return string
  214. */
  215. public function getName()
  216. {
  217. if ($this->name === null) {
  218. $this->process();
  219. }
  220. return $this->name;
  221. }
  222. /**
  223. * @return string
  224. */
  225. public function getType()
  226. {
  227. if ($this->type === null) {
  228. $this->process();
  229. }
  230. return $this->type;
  231. }
  232. private function process()
  233. {
  234. $tokens = $this->tokenStream->tokens();
  235. if ($tokens[$this->id+2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) {
  236. $this->name = trim($tokens[$this->id+2], "'\"");
  237. $this->type = strtolower(
  238. str_replace('PHP_Token_', '', get_class($tokens[$this->id]))
  239. );
  240. }
  241. }
  242. }
  243. class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility
  244. {
  245. /**
  246. * @var array
  247. */
  248. protected $arguments;
  249. /**
  250. * @var integer
  251. */
  252. protected $ccn;
  253. /**
  254. * @var string
  255. */
  256. protected $name;
  257. /**
  258. * @var string
  259. */
  260. protected $signature;
  261. /**
  262. * @return array
  263. */
  264. public function getArguments()
  265. {
  266. if ($this->arguments !== null) {
  267. return $this->arguments;
  268. }
  269. $this->arguments = array();
  270. $tokens = $this->tokenStream->tokens();
  271. $typeDeclaration = null;
  272. // Search for first token inside brackets
  273. $i = $this->id + 2;
  274. while (!$tokens[$i-1] instanceof PHP_Token_OPEN_BRACKET) {
  275. $i++;
  276. }
  277. while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) {
  278. if ($tokens[$i] instanceof PHP_Token_STRING) {
  279. $typeDeclaration = (string)$tokens[$i];
  280. } elseif ($tokens[$i] instanceof PHP_Token_VARIABLE) {
  281. $this->arguments[(string)$tokens[$i]] = $typeDeclaration;
  282. $typeDeclaration = null;
  283. }
  284. $i++;
  285. }
  286. return $this->arguments;
  287. }
  288. /**
  289. * @return string
  290. */
  291. public function getName()
  292. {
  293. if ($this->name !== null) {
  294. return $this->name;
  295. }
  296. $tokens = $this->tokenStream->tokens();
  297. for ($i = $this->id + 1; $i < count($tokens); $i++) {
  298. if ($tokens[$i] instanceof PHP_Token_STRING) {
  299. $this->name = (string)$tokens[$i];
  300. break;
  301. } elseif ($tokens[$i] instanceof PHP_Token_AMPERSAND &&
  302. $tokens[$i+1] instanceof PHP_Token_STRING) {
  303. $this->name = (string)$tokens[$i+1];
  304. break;
  305. } elseif ($tokens[$i] instanceof PHP_Token_OPEN_BRACKET) {
  306. $this->name = 'anonymous function';
  307. break;
  308. }
  309. }
  310. if ($this->name != 'anonymous function') {
  311. for ($i = $this->id; $i; --$i) {
  312. if ($tokens[$i] instanceof PHP_Token_NAMESPACE) {
  313. $this->name = $tokens[$i]->getName() . '\\' . $this->name;
  314. break;
  315. }
  316. if ($tokens[$i] instanceof PHP_Token_INTERFACE) {
  317. break;
  318. }
  319. }
  320. }
  321. return $this->name;
  322. }
  323. /**
  324. * @return integer
  325. */
  326. public function getCCN()
  327. {
  328. if ($this->ccn !== null) {
  329. return $this->ccn;
  330. }
  331. $this->ccn = 1;
  332. $end = $this->getEndTokenId();
  333. $tokens = $this->tokenStream->tokens();
  334. for ($i = $this->id; $i <= $end; $i++) {
  335. switch (get_class($tokens[$i])) {
  336. case 'PHP_Token_IF':
  337. case 'PHP_Token_ELSEIF':
  338. case 'PHP_Token_FOR':
  339. case 'PHP_Token_FOREACH':
  340. case 'PHP_Token_WHILE':
  341. case 'PHP_Token_CASE':
  342. case 'PHP_Token_CATCH':
  343. case 'PHP_Token_BOOLEAN_AND':
  344. case 'PHP_Token_LOGICAL_AND':
  345. case 'PHP_Token_BOOLEAN_OR':
  346. case 'PHP_Token_LOGICAL_OR':
  347. case 'PHP_Token_QUESTION_MARK':
  348. $this->ccn++;
  349. break;
  350. }
  351. }
  352. return $this->ccn;
  353. }
  354. /**
  355. * @return string
  356. */
  357. public function getSignature()
  358. {
  359. if ($this->signature !== null) {
  360. return $this->signature;
  361. }
  362. if ($this->getName() == 'anonymous function') {
  363. $this->signature = 'anonymous function';
  364. $i = $this->id + 1;
  365. } else {
  366. $this->signature = '';
  367. $i = $this->id + 2;
  368. }
  369. $tokens = $this->tokenStream->tokens();
  370. while (isset($tokens[$i]) &&
  371. !$tokens[$i] instanceof PHP_Token_OPEN_CURLY &&
  372. !$tokens[$i] instanceof PHP_Token_SEMICOLON) {
  373. $this->signature .= $tokens[$i++];
  374. }
  375. $this->signature = trim($this->signature);
  376. return $this->signature;
  377. }
  378. }
  379. class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility
  380. {
  381. /**
  382. * @var array
  383. */
  384. protected $interfaces;
  385. /**
  386. * @return string
  387. */
  388. public function getName()
  389. {
  390. return (string)$this->tokenStream[$this->id + 2];
  391. }
  392. /**
  393. * @return boolean
  394. */
  395. public function hasParent()
  396. {
  397. return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS;
  398. }
  399. /**
  400. * @return array
  401. */
  402. public function getPackage()
  403. {
  404. $className = $this->getName();
  405. $docComment = $this->getDocblock();
  406. $result = array(
  407. 'namespace' => '',
  408. 'fullPackage' => '',
  409. 'category' => '',
  410. 'package' => '',
  411. 'subpackage' => ''
  412. );
  413. for ($i = $this->id; $i; --$i) {
  414. if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) {
  415. $result['namespace'] = $this->tokenStream[$i]->getName();
  416. break;
  417. }
  418. }
  419. if (preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) {
  420. $result['category'] = $matches[1];
  421. }
  422. if (preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) {
  423. $result['package'] = $matches[1];
  424. $result['fullPackage'] = $matches[1];
  425. }
  426. if (preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) {
  427. $result['subpackage'] = $matches[1];
  428. $result['fullPackage'] .= '.' . $matches[1];
  429. }
  430. if (empty($result['fullPackage'])) {
  431. $result['fullPackage'] = $this->arrayToName(
  432. explode('_', str_replace('\\', '_', $className)),
  433. '.'
  434. );
  435. }
  436. return $result;
  437. }
  438. /**
  439. * @param array $parts
  440. * @param string $join
  441. * @return string
  442. */
  443. protected function arrayToName(array $parts, $join = '\\')
  444. {
  445. $result = '';
  446. if (count($parts) > 1) {
  447. array_pop($parts);
  448. $result = join($join, $parts);
  449. }
  450. return $result;
  451. }
  452. /**
  453. * @return boolean|string
  454. */
  455. public function getParent()
  456. {
  457. if (!$this->hasParent()) {
  458. return false;
  459. }
  460. $i = $this->id + 6;
  461. $tokens = $this->tokenStream->tokens();
  462. $className = (string)$tokens[$i];
  463. while (isset($tokens[$i+1]) &&
  464. !$tokens[$i+1] instanceof PHP_Token_WHITESPACE) {
  465. $className .= (string)$tokens[++$i];
  466. }
  467. return $className;
  468. }
  469. /**
  470. * @return boolean
  471. */
  472. public function hasInterfaces()
  473. {
  474. return (isset($this->tokenStream[$this->id + 4]) &&
  475. $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) ||
  476. (isset($this->tokenStream[$this->id + 8]) &&
  477. $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS);
  478. }
  479. /**
  480. * @return array|boolean
  481. */
  482. public function getInterfaces()
  483. {
  484. if ($this->interfaces !== null) {
  485. return $this->interfaces;
  486. }
  487. if (!$this->hasInterfaces()) {
  488. return ($this->interfaces = false);
  489. }
  490. if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) {
  491. $i = $this->id + 3;
  492. } else {
  493. $i = $this->id + 7;
  494. }
  495. $tokens = $this->tokenStream->tokens();
  496. while (!$tokens[$i+1] instanceof PHP_Token_OPEN_CURLY) {
  497. $i++;
  498. if ($tokens[$i] instanceof PHP_Token_STRING) {
  499. $this->interfaces[] = (string)$tokens[$i];
  500. }
  501. }
  502. return $this->interfaces;
  503. }
  504. }
  505. class PHP_Token_ABSTRACT extends PHP_Token {}
  506. class PHP_Token_AMPERSAND extends PHP_Token {}
  507. class PHP_Token_AND_EQUAL extends PHP_Token {}
  508. class PHP_Token_ARRAY extends PHP_Token {}
  509. class PHP_Token_ARRAY_CAST extends PHP_Token {}
  510. class PHP_Token_AS extends PHP_Token {}
  511. class PHP_Token_AT extends PHP_Token {}
  512. class PHP_Token_BACKTICK extends PHP_Token {}
  513. class PHP_Token_BAD_CHARACTER extends PHP_Token {}
  514. class PHP_Token_BOOLEAN_AND extends PHP_Token {}
  515. class PHP_Token_BOOLEAN_OR extends PHP_Token {}
  516. class PHP_Token_BOOL_CAST extends PHP_Token {}
  517. class PHP_Token_BREAK extends PHP_Token {}
  518. class PHP_Token_CARET extends PHP_Token {}
  519. class PHP_Token_CASE extends PHP_Token {}
  520. class PHP_Token_CATCH extends PHP_Token {}
  521. class PHP_Token_CHARACTER extends PHP_Token {}
  522. class PHP_Token_CLASS extends PHP_Token_INTERFACE
  523. {
  524. /**
  525. * @return string
  526. */
  527. public function getName()
  528. {
  529. $next = $this->tokenStream[$this->id + 1];
  530. if ($next instanceof PHP_Token_WHITESPACE) {
  531. $next = $this->tokenStream[$this->id + 2];
  532. }
  533. if ($next instanceof PHP_Token_STRING) {
  534. return (string) $next;
  535. }
  536. if ($next instanceof PHP_Token_OPEN_CURLY ||
  537. $next instanceof PHP_Token_EXTENDS ||
  538. $next instanceof PHP_Token_IMPLEMENTS) {
  539. return 'anonymous class';
  540. }
  541. }
  542. }
  543. class PHP_Token_CLASS_C extends PHP_Token {}
  544. class PHP_Token_CLASS_NAME_CONSTANT extends PHP_Token {}
  545. class PHP_Token_CLONE extends PHP_Token {}
  546. class PHP_Token_CLOSE_BRACKET extends PHP_Token {}
  547. class PHP_Token_CLOSE_CURLY extends PHP_Token {}
  548. class PHP_Token_CLOSE_SQUARE extends PHP_Token {}
  549. class PHP_Token_CLOSE_TAG extends PHP_Token {}
  550. class PHP_Token_COLON extends PHP_Token {}
  551. class PHP_Token_COMMA extends PHP_Token {}
  552. class PHP_Token_COMMENT extends PHP_Token {}
  553. class PHP_Token_CONCAT_EQUAL extends PHP_Token {}
  554. class PHP_Token_CONST extends PHP_Token {}
  555. class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token {}
  556. class PHP_Token_CONTINUE extends PHP_Token {}
  557. class PHP_Token_CURLY_OPEN extends PHP_Token {}
  558. class PHP_Token_DEC extends PHP_Token {}
  559. class PHP_Token_DECLARE extends PHP_Token {}
  560. class PHP_Token_DEFAULT extends PHP_Token {}
  561. class PHP_Token_DIV extends PHP_Token {}
  562. class PHP_Token_DIV_EQUAL extends PHP_Token {}
  563. class PHP_Token_DNUMBER extends PHP_Token {}
  564. class PHP_Token_DO extends PHP_Token {}
  565. class PHP_Token_DOC_COMMENT extends PHP_Token {}
  566. class PHP_Token_DOLLAR extends PHP_Token {}
  567. class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token {}
  568. class PHP_Token_DOT extends PHP_Token {}
  569. class PHP_Token_DOUBLE_ARROW extends PHP_Token {}
  570. class PHP_Token_DOUBLE_CAST extends PHP_Token {}
  571. class PHP_Token_DOUBLE_COLON extends PHP_Token {}
  572. class PHP_Token_DOUBLE_QUOTES extends PHP_Token {}
  573. class PHP_Token_ECHO extends PHP_Token {}
  574. class PHP_Token_ELSE extends PHP_Token {}
  575. class PHP_Token_ELSEIF extends PHP_Token {}
  576. class PHP_Token_EMPTY extends PHP_Token {}
  577. class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token {}
  578. class PHP_Token_ENDDECLARE extends PHP_Token {}
  579. class PHP_Token_ENDFOR extends PHP_Token {}
  580. class PHP_Token_ENDFOREACH extends PHP_Token {}
  581. class PHP_Token_ENDIF extends PHP_Token {}
  582. class PHP_Token_ENDSWITCH extends PHP_Token {}
  583. class PHP_Token_ENDWHILE extends PHP_Token {}
  584. class PHP_Token_END_HEREDOC extends PHP_Token {}
  585. class PHP_Token_EQUAL extends PHP_Token {}
  586. class PHP_Token_EVAL extends PHP_Token {}
  587. class PHP_Token_EXCLAMATION_MARK extends PHP_Token {}
  588. class PHP_Token_EXIT extends PHP_Token {}
  589. class PHP_Token_EXTENDS extends PHP_Token {}
  590. class PHP_Token_FILE extends PHP_Token {}
  591. class PHP_Token_FINAL extends PHP_Token {}
  592. class PHP_Token_FOR extends PHP_Token {}
  593. class PHP_Token_FOREACH extends PHP_Token {}
  594. class PHP_Token_FUNC_C extends PHP_Token {}
  595. class PHP_Token_GLOBAL extends PHP_Token {}
  596. class PHP_Token_GT extends PHP_Token {}
  597. class PHP_Token_IF extends PHP_Token {}
  598. class PHP_Token_IMPLEMENTS extends PHP_Token {}
  599. class PHP_Token_INC extends PHP_Token {}
  600. class PHP_Token_INCLUDE extends PHP_Token_Includes {}
  601. class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes {}
  602. class PHP_Token_INLINE_HTML extends PHP_Token {}
  603. class PHP_Token_INSTANCEOF extends PHP_Token {}
  604. class PHP_Token_INT_CAST extends PHP_Token {}
  605. class PHP_Token_ISSET extends PHP_Token {}
  606. class PHP_Token_IS_EQUAL extends PHP_Token {}
  607. class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token {}
  608. class PHP_Token_IS_IDENTICAL extends PHP_Token {}
  609. class PHP_Token_IS_NOT_EQUAL extends PHP_Token {}
  610. class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token {}
  611. class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token {}
  612. class PHP_Token_LINE extends PHP_Token {}
  613. class PHP_Token_LIST extends PHP_Token {}
  614. class PHP_Token_LNUMBER extends PHP_Token {}
  615. class PHP_Token_LOGICAL_AND extends PHP_Token {}
  616. class PHP_Token_LOGICAL_OR extends PHP_Token {}
  617. class PHP_Token_LOGICAL_XOR extends PHP_Token {}
  618. class PHP_Token_LT extends PHP_Token {}
  619. class PHP_Token_METHOD_C extends PHP_Token {}
  620. class PHP_Token_MINUS extends PHP_Token {}
  621. class PHP_Token_MINUS_EQUAL extends PHP_Token {}
  622. class PHP_Token_MOD_EQUAL extends PHP_Token {}
  623. class PHP_Token_MULT extends PHP_Token {}
  624. class PHP_Token_MUL_EQUAL extends PHP_Token {}
  625. class PHP_Token_NEW extends PHP_Token {}
  626. class PHP_Token_NUM_STRING extends PHP_Token {}
  627. class PHP_Token_OBJECT_CAST extends PHP_Token {}
  628. class PHP_Token_OBJECT_OPERATOR extends PHP_Token {}
  629. class PHP_Token_OPEN_BRACKET extends PHP_Token {}
  630. class PHP_Token_OPEN_CURLY extends PHP_Token {}
  631. class PHP_Token_OPEN_SQUARE extends PHP_Token {}
  632. class PHP_Token_OPEN_TAG extends PHP_Token {}
  633. class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token {}
  634. class PHP_Token_OR_EQUAL extends PHP_Token {}
  635. class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token {}
  636. class PHP_Token_PERCENT extends PHP_Token {}
  637. class PHP_Token_PIPE extends PHP_Token {}
  638. class PHP_Token_PLUS extends PHP_Token {}
  639. class PHP_Token_PLUS_EQUAL extends PHP_Token {}
  640. class PHP_Token_PRINT extends PHP_Token {}
  641. class PHP_Token_PRIVATE extends PHP_Token {}
  642. class PHP_Token_PROTECTED extends PHP_Token {}
  643. class PHP_Token_PUBLIC extends PHP_Token {}
  644. class PHP_Token_QUESTION_MARK extends PHP_Token {}
  645. class PHP_Token_REQUIRE extends PHP_Token_Includes {}
  646. class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes {}
  647. class PHP_Token_RETURN extends PHP_Token {}
  648. class PHP_Token_SEMICOLON extends PHP_Token {}
  649. class PHP_Token_SL extends PHP_Token {}
  650. class PHP_Token_SL_EQUAL extends PHP_Token {}
  651. class PHP_Token_SR extends PHP_Token {}
  652. class PHP_Token_SR_EQUAL extends PHP_Token {}
  653. class PHP_Token_START_HEREDOC extends PHP_Token {}
  654. class PHP_Token_STATIC extends PHP_Token {}
  655. class PHP_Token_STRING extends PHP_Token {}
  656. class PHP_Token_STRING_CAST extends PHP_Token {}
  657. class PHP_Token_STRING_VARNAME extends PHP_Token {}
  658. class PHP_Token_SWITCH extends PHP_Token {}
  659. class PHP_Token_THROW extends PHP_Token {}
  660. class PHP_Token_TILDE extends PHP_Token {}
  661. class PHP_Token_TRY extends PHP_Token {}
  662. class PHP_Token_UNSET extends PHP_Token {}
  663. class PHP_Token_UNSET_CAST extends PHP_Token {}
  664. class PHP_Token_USE extends PHP_Token {}
  665. class PHP_Token_VAR extends PHP_Token {}
  666. class PHP_Token_VARIABLE extends PHP_Token {}
  667. class PHP_Token_WHILE extends PHP_Token {}
  668. class PHP_Token_WHITESPACE extends PHP_Token {}
  669. class PHP_Token_XOR_EQUAL extends PHP_Token {}
  670. // Tokens introduced in PHP 5.1
  671. class PHP_Token_HALT_COMPILER extends PHP_Token {}
  672. // Tokens introduced in PHP 5.3
  673. class PHP_Token_DIR extends PHP_Token {}
  674. class PHP_Token_GOTO extends PHP_Token {}
  675. class PHP_Token_NAMESPACE extends PHP_TokenWithScope
  676. {
  677. /**
  678. * @return string
  679. */
  680. public function getName()
  681. {
  682. $tokens = $this->tokenStream->tokens();
  683. $namespace = (string)$tokens[$this->id+2];
  684. for ($i = $this->id + 3;; $i += 2) {
  685. if (isset($tokens[$i]) &&
  686. $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) {
  687. $namespace .= '\\' . $tokens[$i+1];
  688. } else {
  689. break;
  690. }
  691. }
  692. return $namespace;
  693. }
  694. }
  695. class PHP_Token_NS_C extends PHP_Token {}
  696. class PHP_Token_NS_SEPARATOR extends PHP_Token {}
  697. // Tokens introduced in PHP 5.4
  698. class PHP_Token_CALLABLE extends PHP_Token {}
  699. class PHP_Token_INSTEADOF extends PHP_Token {}
  700. class PHP_Token_TRAIT extends PHP_Token_INTERFACE {}
  701. class PHP_Token_TRAIT_C extends PHP_Token {}
  702. // Tokens introduced in PHP 5.5
  703. class PHP_Token_FINALLY extends PHP_Token {}
  704. class PHP_Token_YIELD extends PHP_Token {}
  705. // Tokens introduced in PHP 5.6
  706. class PHP_Token_ELLIPSIS extends PHP_Token {}
  707. class PHP_Token_POW extends PHP_Token {}
  708. class PHP_Token_POW_EQUAL extends PHP_Token {}
  709. // Tokens introduced in PHP 7.0
  710. class PHP_Token_COALESCE extends PHP_Token {}
  711. class PHP_Token_SPACESHIP extends PHP_Token {}
  712. class PHP_Token_YIELD_FROM extends PHP_Token {}
  713. // Tokens introduced in HackLang / HHVM
  714. class PHP_Token_ASYNC extends PHP_Token {}
  715. class PHP_Token_AWAIT extends PHP_Token {}
  716. class PHP_Token_COMPILER_HALT_OFFSET extends PHP_Token {}
  717. class PHP_Token_ENUM extends PHP_Token {}
  718. class PHP_Token_EQUALS extends PHP_Token {}
  719. class PHP_Token_IN extends PHP_Token {}
  720. class PHP_Token_JOIN extends PHP_Token {}
  721. class PHP_Token_LAMBDA_ARROW extends PHP_Token {}
  722. class PHP_Token_LAMBDA_CP extends PHP_Token {}
  723. class PHP_Token_LAMBDA_OP extends PHP_Token {}
  724. class PHP_Token_ONUMBER extends PHP_Token {}
  725. class PHP_Token_SHAPE extends PHP_Token {}
  726. class PHP_Token_TYPE extends PHP_Token {}
  727. class PHP_Token_TYPELIST_GT extends PHP_Token {}
  728. class PHP_Token_TYPELIST_LT extends PHP_Token {}
  729. class PHP_Token_WHERE extends PHP_Token {}
  730. class PHP_Token_XHP_ATTRIBUTE extends PHP_Token {}
  731. class PHP_Token_XHP_CATEGORY extends PHP_Token {}
  732. class PHP_Token_XHP_CATEGORY_LABEL extends PHP_Token {}
  733. class PHP_Token_XHP_CHILDREN extends PHP_Token {}
  734. class PHP_Token_XHP_LABEL extends PHP_Token {}
  735. class PHP_Token_XHP_REQUIRED extends PHP_Token {}
  736. class PHP_Token_XHP_TAG_GT extends PHP_Token {}
  737. class PHP_Token_XHP_TAG_LT extends PHP_Token {}
  738. class PHP_Token_XHP_TEXT extends PHP_Token {}