Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php declare(strict_types=1);
2
 
3
namespace PhpParser\Builder;
4
 
5
use PhpParser;
6
use PhpParser\BuilderHelpers;
7
use PhpParser\Node;
8
use PhpParser\Node\Name;
9
use PhpParser\Node\Stmt;
10
 
11
class Interface_ extends Declaration
12
{
13
    protected $name;
14
    protected $extends = [];
15
    protected $constants = [];
16
    protected $methods = [];
17
 
18
    /** @var Node\AttributeGroup[] */
19
    protected $attributeGroups = [];
20
 
21
    /**
22
     * Creates an interface builder.
23
     *
24
     * @param string $name Name of the interface
25
     */
26
    public function __construct(string $name) {
27
        $this->name = $name;
28
    }
29
 
30
    /**
31
     * Extends one or more interfaces.
32
     *
33
     * @param Name|string ...$interfaces Names of interfaces to extend
34
     *
35
     * @return $this The builder instance (for fluid interface)
36
     */
37
    public function extend(...$interfaces) {
38
        foreach ($interfaces as $interface) {
39
            $this->extends[] = BuilderHelpers::normalizeName($interface);
40
        }
41
 
42
        return $this;
43
    }
44
 
45
    /**
46
     * Adds a statement.
47
     *
48
     * @param Stmt|PhpParser\Builder $stmt The statement to add
49
     *
50
     * @return $this The builder instance (for fluid interface)
51
     */
52
    public function addStmt($stmt) {
53
        $stmt = BuilderHelpers::normalizeNode($stmt);
54
 
55
        if ($stmt instanceof Stmt\ClassConst) {
56
            $this->constants[] = $stmt;
57
        } elseif ($stmt instanceof Stmt\ClassMethod) {
58
            // we erase all statements in the body of an interface method
59
            $stmt->stmts = null;
60
            $this->methods[] = $stmt;
61
        } else {
62
            throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
63
        }
64
 
65
        return $this;
66
    }
67
 
68
    /**
69
     * Adds an attribute group.
70
     *
71
     * @param Node\Attribute|Node\AttributeGroup $attribute
72
     *
73
     * @return $this The builder instance (for fluid interface)
74
     */
75
    public function addAttribute($attribute) {
76
        $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
77
 
78
        return $this;
79
    }
80
 
81
    /**
82
     * Returns the built interface node.
83
     *
84
     * @return Stmt\Interface_ The built interface node
85
     */
86
    public function getNode() : PhpParser\Node {
87
        return new Stmt\Interface_($this->name, [
88
            'extends' => $this->extends,
89
            'stmts' => array_merge($this->constants, $this->methods),
90
            'attrGroups' => $this->attributeGroups,
91
        ], $this->attributes);
92
    }
93
}