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\Stmt;
9
 
10
class Method extends FunctionLike
11
{
12
    protected $name;
13
    protected $flags = 0;
14
 
15
    /** @var array|null */
16
    protected $stmts = [];
17
 
18
    /** @var Node\AttributeGroup[] */
19
    protected $attributeGroups = [];
20
 
21
    /**
22
     * Creates a method builder.
23
     *
24
     * @param string $name Name of the method
25
     */
26
    public function __construct(string $name) {
27
        $this->name = $name;
28
    }
29
 
30
    /**
31
     * Makes the method public.
32
     *
33
     * @return $this The builder instance (for fluid interface)
34
     */
35
    public function makePublic() {
36
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC);
37
 
38
        return $this;
39
    }
40
 
41
    /**
42
     * Makes the method protected.
43
     *
44
     * @return $this The builder instance (for fluid interface)
45
     */
46
    public function makeProtected() {
47
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED);
48
 
49
        return $this;
50
    }
51
 
52
    /**
53
     * Makes the method private.
54
     *
55
     * @return $this The builder instance (for fluid interface)
56
     */
57
    public function makePrivate() {
58
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE);
59
 
60
        return $this;
61
    }
62
 
63
    /**
64
     * Makes the method static.
65
     *
66
     * @return $this The builder instance (for fluid interface)
67
     */
68
    public function makeStatic() {
69
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC);
70
 
71
        return $this;
72
    }
73
 
74
    /**
75
     * Makes the method abstract.
76
     *
77
     * @return $this The builder instance (for fluid interface)
78
     */
79
    public function makeAbstract() {
80
        if (!empty($this->stmts)) {
81
            throw new \LogicException('Cannot make method with statements abstract');
82
        }
83
 
84
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT);
85
        $this->stmts = null; // abstract methods don't have statements
86
 
87
        return $this;
88
    }
89
 
90
    /**
91
     * Makes the method final.
92
     *
93
     * @return $this The builder instance (for fluid interface)
94
     */
95
    public function makeFinal() {
96
        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL);
97
 
98
        return $this;
99
    }
100
 
101
    /**
102
     * Adds a statement.
103
     *
104
     * @param Node|PhpParser\Builder $stmt The statement to add
105
     *
106
     * @return $this The builder instance (for fluid interface)
107
     */
108
    public function addStmt($stmt) {
109
        if (null === $this->stmts) {
110
            throw new \LogicException('Cannot add statements to an abstract method');
111
        }
112
 
113
        $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
114
 
115
        return $this;
116
    }
117
 
118
    /**
119
     * Adds an attribute group.
120
     *
121
     * @param Node\Attribute|Node\AttributeGroup $attribute
122
     *
123
     * @return $this The builder instance (for fluid interface)
124
     */
125
    public function addAttribute($attribute) {
126
        $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
127
 
128
        return $this;
129
    }
130
 
131
    /**
132
     * Returns the built method node.
133
     *
134
     * @return Stmt\ClassMethod The built method node
135
     */
136
    public function getNode() : Node {
137
        return new Stmt\ClassMethod($this->name, [
138
            'flags'      => $this->flags,
139
            'byRef'      => $this->returnByRef,
140
            'params'     => $this->params,
141
            'returnType' => $this->returnType,
142
            'stmts'      => $this->stmts,
143
            'attrGroups' => $this->attributeGroups,
144
        ], $this->attributes);
145
    }
146
}