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\NodeVisitor;
4
 
5
use function array_pop;
6
use function count;
7
use PhpParser\Node;
8
use PhpParser\NodeVisitorAbstract;
9
 
10
/**
11
 * Visitor that connects a child node to its parent node.
12
 *
13
 * On the child node, the parent node can be accessed through
14
 * <code>$node->getAttribute('parent')</code>.
15
 */
16
final class ParentConnectingVisitor extends NodeVisitorAbstract
17
{
18
    /**
19
     * @var Node[]
20
     */
21
    private $stack = [];
22
 
23
    public function beforeTraverse(array $nodes)
24
    {
25
        $this->stack = [];
26
    }
27
 
28
    public function enterNode(Node $node)
29
    {
30
        if (!empty($this->stack)) {
31
            $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
32
        }
33
 
34
        $this->stack[] = $node;
35
    }
36
 
37
    public function leaveNode(Node $node)
38
    {
39
        array_pop($this->stack);
40
    }
41
}