PageRenderTime 52ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://bitbucket.org/sklyarov_ivan/trap
PHP | 717 lines | 550 code | 78 blank | 89 comment | 52 complexity | 33157a50fcb6e80f50b8675004e92f47 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * php-token-stream
  4. *
  5. * Copyright (c) 2009-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * * Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * * Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * * Neither the name of Sebastian Bergmann nor the names of his
  21. * contributors may be used to endorse or promote products derived
  22. * from this software without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  27. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  28. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  29. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  30. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  31. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  34. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  35. * POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. * @package PHP_TokenStream
  38. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  39. * @copyright 2009-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  40. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  41. * @since File available since Release 1.0.0
  42. */
  43. /**
  44. * A PHP token.
  45. *
  46. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  47. * @copyright 2009-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  48. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  49. * @version Release: @package_version@
  50. * @link http://github.com/sebastianbergmann/php-token-stream/tree
  51. * @since Class available since Release 1.0.0
  52. */
  53. abstract class PHP_Token
  54. {
  55. /**
  56. * @var string
  57. */
  58. protected $text;
  59. /**
  60. * @var integer
  61. */
  62. protected $line;
  63. /**
  64. * @var PHP_Token_Stream
  65. */
  66. protected $tokenStream;
  67. /**
  68. * @var integer
  69. */
  70. protected $id;
  71. /**
  72. * Constructor.
  73. *
  74. * @param string $text
  75. * @param integer $line
  76. * @param PHP_Token_Stream $tokenStream
  77. * @param integer $id
  78. */
  79. public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id)
  80. {
  81. $this->text = $text;
  82. $this->line = $line;
  83. $this->tokenStream = $tokenStream;
  84. $this->id = $id;
  85. }
  86. /**
  87. * @return string
  88. */
  89. public function __toString()
  90. {
  91. return $this->text;
  92. }
  93. /**
  94. * @return integer
  95. */
  96. public function getLine()
  97. {
  98. return $this->line;
  99. }
  100. }
  101. abstract class PHP_TokenWithScope extends PHP_Token
  102. {
  103. protected $endTokenId;
  104. /**
  105. * Get the docblock for this token
  106. *
  107. * This method will fetch the docblock belonging to the current token. The
  108. * docblock must be placed on the line directly above the token to be
  109. * recognized.
  110. *
  111. * @return string|null Returns the docblock as a string if found
  112. */
  113. public function getDocblock()
  114. {
  115. $tokens = $this->tokenStream->tokens();
  116. $currentLineNumber = $tokens[$this->id]->getLine();
  117. $prevLineNumber = $currentLineNumber - 1;
  118. for ($i = $this->id - 1; $i; $i--) {
  119. if (!isset($tokens[$i])) {
  120. return;
  121. }
  122. if ($tokens[$i] instanceof PHP_Token_FUNCTION ||
  123. $tokens[$i] instanceof PHP_Token_CLASS ||
  124. $tokens[$i] instanceof PHP_Token_TRAIT) {
  125. // Some other trait, class or function, no docblock can be
  126. // used for the current token
  127. break;
  128. }
  129. $line = $tokens[$i]->getLine();
  130. if ($line == $currentLineNumber ||
  131. ($line == $prevLineNumber &&
  132. $tokens[$i] instanceof PHP_Token_WHITESPACE)) {
  133. continue;
  134. }
  135. if ($line < $currentLineNumber &&
  136. !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) {
  137. break;
  138. }
  139. return (string)$tokens[$i];
  140. }
  141. }
  142. public function getEndTokenId()
  143. {
  144. $block = 0;
  145. $i = $this->id;
  146. $tokens = $this->tokenStream->tokens();
  147. while ($this->endTokenId === NULL && isset($tokens[$i])) {
  148. if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY ||
  149. $tokens[$i] instanceof PHP_Token_CURLY_OPEN) {
  150. $block++;
  151. }
  152. else if ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) {
  153. $block--;
  154. if ($block === 0) {
  155. $this->endTokenId = $i;
  156. }
  157. }
  158. else if (($this instanceof PHP_Token_FUNCTION ||
  159. $this instanceof PHP_Token_NAMESPACE) &&
  160. $tokens[$i] instanceof PHP_Token_SEMICOLON) {
  161. if ($block === 0) {
  162. $this->endTokenId = $i;
  163. }
  164. }
  165. $i++;
  166. }
  167. if ($this->endTokenId === NULL) {
  168. $this->endTokenId = $this->id;
  169. }
  170. return $this->endTokenId;
  171. }
  172. public function getEndLine()
  173. {
  174. return $this->tokenStream[$this->getEndTokenId()]->getLine();
  175. }
  176. }
  177. abstract class PHP_TokenWithScopeAndVisibility extends PHP_TokenWithScope {
  178. public function getVisibility()
  179. {
  180. $tokens = $this->tokenStream->tokens();
  181. for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
  182. if (isset($tokens[$i]) &&
  183. ($tokens[$i] instanceof PHP_Token_PRIVATE ||
  184. $tokens[$i] instanceof PHP_Token_PROTECTED ||
  185. $tokens[$i] instanceof PHP_Token_PUBLIC)) {
  186. return strtolower(
  187. str_replace('PHP_Token_', '', get_class($tokens[$i]))
  188. );
  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. // no keywords; stop visibility search
  195. break;
  196. }
  197. }
  198. }
  199. public function getKeywords()
  200. {
  201. $keywords = array();
  202. $tokens = $this->tokenStream->tokens();
  203. for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) {
  204. if (isset($tokens[$i]) &&
  205. ($tokens[$i] instanceof PHP_Token_PRIVATE ||
  206. $tokens[$i] instanceof PHP_Token_PROTECTED ||
  207. $tokens[$i] instanceof PHP_Token_PUBLIC)) {
  208. continue;
  209. }
  210. if (isset($tokens[$i]) &&
  211. ($tokens[$i] instanceof PHP_Token_STATIC ||
  212. $tokens[$i] instanceof PHP_Token_FINAL ||
  213. $tokens[$i] instanceof PHP_Token_ABSTRACT)) {
  214. $keywords[] = strtolower(
  215. str_replace('PHP_Token_', '', get_class($tokens[$i]))
  216. );
  217. }
  218. }
  219. return implode(',', $keywords);
  220. }
  221. }
  222. abstract class PHP_Token_Includes extends PHP_Token
  223. {
  224. protected $name;
  225. protected $type;
  226. public function getName()
  227. {
  228. if ($this->name !== NULL) {
  229. return $this->name;
  230. }
  231. $tokens = $this->tokenStream->tokens();
  232. if ($tokens[$this->id+2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) {
  233. $this->name = trim($tokens[$this->id+2], "'\"");
  234. $this->type = strtolower(
  235. str_replace('PHP_Token_', '', get_class($tokens[$this->id]))
  236. );
  237. }
  238. return $this->name;
  239. }
  240. public function getType()
  241. {
  242. $this->getName();
  243. return $this->type;
  244. }
  245. }
  246. class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes {}
  247. class PHP_Token_REQUIRE extends PHP_Token_Includes {}
  248. class PHP_Token_EVAL extends PHP_Token {}
  249. class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes {}
  250. class PHP_Token_INCLUDE extends PHP_Token_Includes {}
  251. class PHP_Token_LOGICAL_OR extends PHP_Token {}
  252. class PHP_Token_LOGICAL_XOR extends PHP_Token {}
  253. class PHP_Token_LOGICAL_AND extends PHP_Token {}
  254. class PHP_Token_PRINT extends PHP_Token {}
  255. class PHP_Token_SR_EQUAL extends PHP_Token {}
  256. class PHP_Token_SL_EQUAL extends PHP_Token {}
  257. class PHP_Token_XOR_EQUAL extends PHP_Token {}
  258. class PHP_Token_OR_EQUAL extends PHP_Token {}
  259. class PHP_Token_AND_EQUAL extends PHP_Token {}
  260. class PHP_Token_MOD_EQUAL extends PHP_Token {}
  261. class PHP_Token_CONCAT_EQUAL extends PHP_Token {}
  262. class PHP_Token_DIV_EQUAL extends PHP_Token {}
  263. class PHP_Token_MUL_EQUAL extends PHP_Token {}
  264. class PHP_Token_MINUS_EQUAL extends PHP_Token {}
  265. class PHP_Token_PLUS_EQUAL extends PHP_Token {}
  266. class PHP_Token_BOOLEAN_OR extends PHP_Token {}
  267. class PHP_Token_BOOLEAN_AND extends PHP_Token {}
  268. class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token {}
  269. class PHP_Token_IS_IDENTICAL extends PHP_Token {}
  270. class PHP_Token_IS_NOT_EQUAL extends PHP_Token {}
  271. class PHP_Token_IS_EQUAL extends PHP_Token {}
  272. class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token {}
  273. class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token {}
  274. class PHP_Token_SR extends PHP_Token {}
  275. class PHP_Token_SL extends PHP_Token {}
  276. class PHP_Token_INSTANCEOF extends PHP_Token {}
  277. class PHP_Token_UNSET_CAST extends PHP_Token {}
  278. class PHP_Token_BOOL_CAST extends PHP_Token {}
  279. class PHP_Token_OBJECT_CAST extends PHP_Token {}
  280. class PHP_Token_ARRAY_CAST extends PHP_Token {}
  281. class PHP_Token_STRING_CAST extends PHP_Token {}
  282. class PHP_Token_DOUBLE_CAST extends PHP_Token {}
  283. class PHP_Token_INT_CAST extends PHP_Token {}
  284. class PHP_Token_DEC extends PHP_Token {}
  285. class PHP_Token_INC extends PHP_Token {}
  286. class PHP_Token_CLONE extends PHP_Token {}
  287. class PHP_Token_NEW extends PHP_Token {}
  288. class PHP_Token_EXIT extends PHP_Token {}
  289. class PHP_Token_IF extends PHP_Token {}
  290. class PHP_Token_ELSEIF extends PHP_Token {}
  291. class PHP_Token_ELSE extends PHP_Token {}
  292. class PHP_Token_ENDIF extends PHP_Token {}
  293. class PHP_Token_LNUMBER extends PHP_Token {}
  294. class PHP_Token_DNUMBER extends PHP_Token {}
  295. class PHP_Token_STRING extends PHP_Token {}
  296. class PHP_Token_STRING_VARNAME extends PHP_Token {}
  297. class PHP_Token_VARIABLE extends PHP_Token {}
  298. class PHP_Token_NUM_STRING extends PHP_Token {}
  299. class PHP_Token_INLINE_HTML extends PHP_Token {}
  300. class PHP_Token_CHARACTER extends PHP_Token {}
  301. class PHP_Token_BAD_CHARACTER extends PHP_Token {}
  302. class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token {}
  303. class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token {}
  304. class PHP_Token_ECHO extends PHP_Token {}
  305. class PHP_Token_DO extends PHP_Token {}
  306. class PHP_Token_WHILE extends PHP_Token {}
  307. class PHP_Token_ENDWHILE extends PHP_Token {}
  308. class PHP_Token_FOR extends PHP_Token {}
  309. class PHP_Token_ENDFOR extends PHP_Token {}
  310. class PHP_Token_FOREACH extends PHP_Token {}
  311. class PHP_Token_ENDFOREACH extends PHP_Token {}
  312. class PHP_Token_DECLARE extends PHP_Token {}
  313. class PHP_Token_ENDDECLARE extends PHP_Token {}
  314. class PHP_Token_AS extends PHP_Token {}
  315. class PHP_Token_SWITCH extends PHP_Token {}
  316. class PHP_Token_ENDSWITCH extends PHP_Token {}
  317. class PHP_Token_CASE extends PHP_Token {}
  318. class PHP_Token_DEFAULT extends PHP_Token {}
  319. class PHP_Token_BREAK extends PHP_Token {}
  320. class PHP_Token_CONTINUE extends PHP_Token {}
  321. class PHP_Token_GOTO extends PHP_Token {}
  322. class PHP_Token_CALLABLE extends PHP_Token {}
  323. class PHP_Token_INSTEADOF extends PHP_Token {}
  324. class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility
  325. {
  326. protected $arguments;
  327. protected $ccn;
  328. protected $name;
  329. protected $signature;
  330. public function getArguments()
  331. {
  332. if ($this->arguments !== NULL) {
  333. return $this->arguments;
  334. }
  335. $this->arguments = array();
  336. $i = $this->id + 3;
  337. $tokens = $this->tokenStream->tokens();
  338. $typeHint = NULL;
  339. while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) {
  340. if ($tokens[$i] instanceof PHP_Token_STRING) {
  341. $typeHint = (string)$tokens[$i];
  342. }
  343. else if ($tokens[$i] instanceof PHP_Token_VARIABLE) {
  344. $this->arguments[(string)$tokens[$i]] = $typeHint;
  345. $typeHint = NULL;
  346. }
  347. $i++;
  348. }
  349. return $this->arguments;
  350. }
  351. public function getName()
  352. {
  353. if ($this->name !== NULL) {
  354. return $this->name;
  355. }
  356. $tokens = $this->tokenStream->tokens();
  357. if ($tokens[$this->id+2] instanceof PHP_Token_STRING) {
  358. $this->name = (string)$tokens[$this->id+2];
  359. }
  360. else if ($tokens[$this->id+2] instanceof PHP_Token_AMPERSAND &&
  361. $tokens[$this->id+3] instanceof PHP_Token_STRING) {
  362. $this->name = (string)$tokens[$this->id+3];
  363. }
  364. else {
  365. $this->name = 'anonymous function';
  366. }
  367. if ($this->name != 'anonymous function') {
  368. for ($i = $this->id; $i; --$i) {
  369. if ($tokens[$i] instanceof PHP_Token_NAMESPACE) {
  370. $this->name = $tokens[$i]->getName() . '\\' . $this->name;
  371. break;
  372. }
  373. if ($tokens[$i] instanceof PHP_Token_INTERFACE) {
  374. break;
  375. }
  376. }
  377. }
  378. return $this->name;
  379. }
  380. public function getCCN()
  381. {
  382. if ($this->ccn !== NULL) {
  383. return $this->ccn;
  384. }
  385. $this->ccn = 1;
  386. $end = $this->getEndTokenId();
  387. $tokens = $this->tokenStream->tokens();
  388. for ($i = $this->id; $i <= $end; $i++) {
  389. switch (get_class($tokens[$i])) {
  390. case 'PHP_Token_IF':
  391. case 'PHP_Token_ELSEIF':
  392. case 'PHP_Token_FOR':
  393. case 'PHP_Token_FOREACH':
  394. case 'PHP_Token_WHILE':
  395. case 'PHP_Token_CASE':
  396. case 'PHP_Token_CATCH':
  397. case 'PHP_Token_BOOLEAN_AND':
  398. case 'PHP_Token_LOGICAL_AND':
  399. case 'PHP_Token_BOOLEAN_OR':
  400. case 'PHP_Token_LOGICAL_OR':
  401. case 'PHP_Token_QUESTION_MARK': {
  402. $this->ccn++;
  403. }
  404. break;
  405. }
  406. }
  407. return $this->ccn;
  408. }
  409. public function getSignature()
  410. {
  411. if ($this->signature !== NULL) {
  412. return $this->signature;
  413. }
  414. if ($this->getName() == 'anonymous function') {
  415. $this->signature = 'anonymous function';
  416. $i = $this->id + 1;
  417. } else {
  418. $this->signature = '';
  419. $i = $this->id + 2;
  420. }
  421. $tokens = $this->tokenStream->tokens();
  422. while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) {
  423. $this->signature .= $tokens[$i++];
  424. }
  425. $this->signature .= ')';
  426. return $this->signature;
  427. }
  428. }
  429. class PHP_Token_CONST extends PHP_Token {}
  430. class PHP_Token_RETURN extends PHP_Token {}
  431. class PHP_Token_TRY extends PHP_Token {}
  432. class PHP_Token_CATCH extends PHP_Token {}
  433. class PHP_Token_THROW extends PHP_Token {}
  434. class PHP_Token_USE extends PHP_Token {}
  435. class PHP_Token_GLOBAL extends PHP_Token {}
  436. class PHP_Token_PUBLIC extends PHP_Token {}
  437. class PHP_Token_PROTECTED extends PHP_Token {}
  438. class PHP_Token_PRIVATE extends PHP_Token {}
  439. class PHP_Token_FINAL extends PHP_Token {}
  440. class PHP_Token_ABSTRACT extends PHP_Token {}
  441. class PHP_Token_STATIC extends PHP_Token {}
  442. class PHP_Token_VAR extends PHP_Token {}
  443. class PHP_Token_UNSET extends PHP_Token {}
  444. class PHP_Token_ISSET extends PHP_Token {}
  445. class PHP_Token_EMPTY extends PHP_Token {}
  446. class PHP_Token_HALT_COMPILER extends PHP_Token {}
  447. class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility
  448. {
  449. protected $interfaces;
  450. public function getName()
  451. {
  452. return (string)$this->tokenStream[$this->id + 2];
  453. }
  454. public function hasParent()
  455. {
  456. return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS;
  457. }
  458. public function getPackage()
  459. {
  460. $className = $this->getName();
  461. $docComment = $this->getDocblock();
  462. $result = array(
  463. 'namespace' => '',
  464. 'fullPackage' => '',
  465. 'category' => '',
  466. 'package' => '',
  467. 'subpackage' => ''
  468. );
  469. for ($i = $this->id; $i; --$i) {
  470. if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) {
  471. $result['namespace'] = $this->tokenStream[$i]->getName();
  472. break;
  473. }
  474. }
  475. if (preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) {
  476. $result['category'] = $matches[1];
  477. }
  478. if (preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) {
  479. $result['package'] = $matches[1];
  480. $result['fullPackage'] = $matches[1];
  481. }
  482. if (preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) {
  483. $result['subpackage'] = $matches[1];
  484. $result['fullPackage'] .= '.' . $matches[1];
  485. }
  486. if (empty($result['fullPackage'])) {
  487. $result['fullPackage'] = $this->arrayToName(
  488. explode('_', str_replace('\\', '_', $className)), '.'
  489. );
  490. }
  491. return $result;
  492. }
  493. protected function arrayToName(array $parts, $join = '\\')
  494. {
  495. $result = '';
  496. if (count($parts) > 1) {
  497. array_pop($parts);
  498. $result = join($join, $parts);
  499. }
  500. return $result;
  501. }
  502. public function getParent()
  503. {
  504. if (!$this->hasParent()) {
  505. return FALSE;
  506. }
  507. $i = $this->id + 6;
  508. $tokens = $this->tokenStream->tokens();
  509. $className = (string)$tokens[$i];
  510. while (isset($tokens[$i+1]) &&
  511. !$tokens[$i+1] instanceof PHP_Token_WHITESPACE) {
  512. $className .= (string)$tokens[++$i];
  513. }
  514. return $className;
  515. }
  516. public function hasInterfaces()
  517. {
  518. return (isset($this->tokenStream[$this->id + 4]) &&
  519. $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) ||
  520. (isset($this->tokenStream[$this->id + 8]) &&
  521. $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS);
  522. }
  523. public function getInterfaces()
  524. {
  525. if ($this->interfaces !== NULL) {
  526. return $this->interfaces;
  527. }
  528. if (!$this->hasInterfaces()) {
  529. return ($this->interfaces = FALSE);
  530. }
  531. if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) {
  532. $i = $this->id + 3;
  533. } else {
  534. $i = $this->id + 7;
  535. }
  536. $tokens = $this->tokenStream->tokens();
  537. while (!$tokens[$i+1] instanceof PHP_Token_OPEN_CURLY) {
  538. $i++;
  539. if ($tokens[$i] instanceof PHP_Token_STRING) {
  540. $this->interfaces[] = (string)$tokens[$i];
  541. }
  542. }
  543. return $this->interfaces;
  544. }
  545. }
  546. class PHP_Token_CLASS extends PHP_Token_INTERFACE {}
  547. class PHP_Token_TRAIT extends PHP_Token_INTERFACE {}
  548. class PHP_Token_EXTENDS extends PHP_Token {}
  549. class PHP_Token_IMPLEMENTS extends PHP_Token {}
  550. class PHP_Token_OBJECT_OPERATOR extends PHP_Token {}
  551. class PHP_Token_DOUBLE_ARROW extends PHP_Token {}
  552. class PHP_Token_LIST extends PHP_Token {}
  553. class PHP_Token_ARRAY extends PHP_Token {}
  554. class PHP_Token_CLASS_C extends PHP_Token {}
  555. class PHP_Token_TRAIT_C extends PHP_Token {}
  556. class PHP_Token_METHOD_C extends PHP_Token {}
  557. class PHP_Token_FUNC_C extends PHP_Token {}
  558. class PHP_Token_LINE extends PHP_Token {}
  559. class PHP_Token_FILE extends PHP_Token {}
  560. class PHP_Token_COMMENT extends PHP_Token {}
  561. class PHP_Token_DOC_COMMENT extends PHP_Token {}
  562. class PHP_Token_OPEN_TAG extends PHP_Token {}
  563. class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token {}
  564. class PHP_Token_CLOSE_TAG extends PHP_Token {}
  565. class PHP_Token_WHITESPACE extends PHP_Token {}
  566. class PHP_Token_START_HEREDOC extends PHP_Token {}
  567. class PHP_Token_END_HEREDOC extends PHP_Token {}
  568. class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token {}
  569. class PHP_Token_CURLY_OPEN extends PHP_Token {}
  570. class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token {}
  571. class PHP_Token_NAMESPACE extends PHP_TokenWithScope
  572. {
  573. public function getName()
  574. {
  575. $tokens = $this->tokenStream->tokens();
  576. $namespace = (string)$tokens[$this->id+2];
  577. for ($i = $this->id + 3; ; $i += 2) {
  578. if (isset($tokens[$i]) &&
  579. $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) {
  580. $namespace .= '\\' . $tokens[$i+1];
  581. } else {
  582. break;
  583. }
  584. }
  585. return $namespace;
  586. }
  587. }
  588. class PHP_Token_NS_C extends PHP_Token {}
  589. class PHP_Token_DIR extends PHP_Token {}
  590. class PHP_Token_NS_SEPARATOR extends PHP_Token {}
  591. class PHP_Token_DOUBLE_COLON extends PHP_Token {}
  592. class PHP_Token_OPEN_BRACKET extends PHP_Token {}
  593. class PHP_Token_CLOSE_BRACKET extends PHP_Token {}
  594. class PHP_Token_OPEN_SQUARE extends PHP_Token {}
  595. class PHP_Token_CLOSE_SQUARE extends PHP_Token {}
  596. class PHP_Token_OPEN_CURLY extends PHP_Token {}
  597. class PHP_Token_CLOSE_CURLY extends PHP_Token {}
  598. class PHP_Token_SEMICOLON extends PHP_Token {}
  599. class PHP_Token_DOT extends PHP_Token {}
  600. class PHP_Token_COMMA extends PHP_Token {}
  601. class PHP_Token_EQUAL extends PHP_Token {}
  602. class PHP_Token_LT extends PHP_Token {}
  603. class PHP_Token_GT extends PHP_Token {}
  604. class PHP_Token_PLUS extends PHP_Token {}
  605. class PHP_Token_MINUS extends PHP_Token {}
  606. class PHP_Token_MULT extends PHP_Token {}
  607. class PHP_Token_DIV extends PHP_Token {}
  608. class PHP_Token_QUESTION_MARK extends PHP_Token {}
  609. class PHP_Token_EXCLAMATION_MARK extends PHP_Token {}
  610. class PHP_Token_COLON extends PHP_Token {}
  611. class PHP_Token_DOUBLE_QUOTES extends PHP_Token {}
  612. class PHP_Token_AT extends PHP_Token {}
  613. class PHP_Token_AMPERSAND extends PHP_Token {}
  614. class PHP_Token_PERCENT extends PHP_Token {}
  615. class PHP_Token_PIPE extends PHP_Token {}
  616. class PHP_Token_DOLLAR extends PHP_Token {}
  617. class PHP_Token_CARET extends PHP_Token {}
  618. class PHP_Token_TILDE extends PHP_Token {}
  619. class PHP_Token_BACKTICK extends PHP_Token {}