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\Builder;
6
use PhpParser\BuilderHelpers;
7
use PhpParser\Node;
8
use PhpParser\Node\Stmt;
9
 
10
class TraitUse implements Builder
11
{
12
    protected $traits = [];
13
    protected $adaptations = [];
14
 
15
    /**
16
     * Creates a trait use builder.
17
     *
18
     * @param Node\Name|string ...$traits Names of used traits
19
     */
20
    public function __construct(...$traits) {
21
        foreach ($traits as $trait) {
22
            $this->and($trait);
23
        }
24
    }
25
 
26
    /**
27
     * Adds used trait.
28
     *
29
     * @param Node\Name|string $trait Trait name
30
     *
31
     * @return $this The builder instance (for fluid interface)
32
     */
33
    public function and($trait) {
34
        $this->traits[] = BuilderHelpers::normalizeName($trait);
35
        return $this;
36
    }
37
 
38
    /**
39
     * Adds trait adaptation.
40
     *
41
     * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation
42
     *
43
     * @return $this The builder instance (for fluid interface)
44
     */
45
    public function with($adaptation) {
46
        $adaptation = BuilderHelpers::normalizeNode($adaptation);
47
 
48
        if (!$adaptation instanceof Stmt\TraitUseAdaptation) {
49
            throw new \LogicException('Adaptation must have type TraitUseAdaptation');
50
        }
51
 
52
        $this->adaptations[] = $adaptation;
53
        return $this;
54
    }
55
 
56
    /**
57
     * Returns the built node.
58
     *
59
     * @return Node The built node
60
     */
61
    public function getNode() : Node {
62
        return new Stmt\TraitUse($this->traits, $this->adaptations);
63
    }
64
}