Version 1
[yaffs-website] / vendor / nikic / php-parser / lib / PhpParser / Builder / Interface_.php
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 }