comparison vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 5fb285c0d0e3
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace PhpParser\Builder;
4
5 use PhpParser;
6 use PhpParser\Node\Name;
7 use PhpParser\Node\Stmt;
8
9 class Interface_ extends Declaration
10 {
11 protected $name;
12 protected $extends = array();
13 protected $constants = array();
14 protected $methods = array();
15
16 /**
17 * Creates an interface builder.
18 *
19 * @param string $name Name of the interface
20 */
21 public function __construct($name) {
22 $this->name = $name;
23 }
24
25 /**
26 * Extends one or more interfaces.
27 *
28 * @param Name|string ...$interfaces Names of interfaces to extend
29 *
30 * @return $this The builder instance (for fluid interface)
31 */
32 public function extend() {
33 foreach (func_get_args() as $interface) {
34 $this->extends[] = $this->normalizeName($interface);
35 }
36
37 return $this;
38 }
39
40 /**
41 * Adds a statement.
42 *
43 * @param Stmt|PhpParser\Builder $stmt The statement to add
44 *
45 * @return $this The builder instance (for fluid interface)
46 */
47 public function addStmt($stmt) {
48 $stmt = $this->normalizeNode($stmt);
49
50 $type = $stmt->getType();
51 switch ($type) {
52 case 'Stmt_ClassConst':
53 $this->constants[] = $stmt;
54 break;
55
56 case 'Stmt_ClassMethod':
57 // we erase all statements in the body of an interface method
58 $stmt->stmts = null;
59 $this->methods[] = $stmt;
60 break;
61
62 default:
63 throw new \LogicException(sprintf('Unexpected node of type "%s"', $type));
64 }
65
66 return $this;
67 }
68
69 /**
70 * Returns the built interface node.
71 *
72 * @return Stmt\Interface_ The built interface node
73 */
74 public function getNode() {
75 return new Stmt\Interface_($this->name, array(
76 'extends' => $this->extends,
77 'stmts' => array_merge($this->constants, $this->methods),
78 ), $this->attributes);
79 }
80 }