9531edbce7c4dcbf3e6206444a20676e24c3acab
[yaffs-website] / vendor / nikic / php-parser / lib / PhpParser / NodeVisitor / FindingVisitor.php
1 <?php declare(strict_types=1);
2
3 namespace PhpParser\NodeVisitor;
4
5 use PhpParser\Node;
6 use PhpParser\NodeVisitorAbstract;
7
8 /**
9  * This visitor can be used to find and collect all nodes satisfying some criterion determined by
10  * a filter callback.
11  */
12 class FindingVisitor extends NodeVisitorAbstract
13 {
14     /** @var callable Filter callback */
15     protected $filterCallback;
16     /** @var Node[] Found nodes */
17     protected $foundNodes;
18
19     public function __construct(callable $filterCallback) {
20         $this->filterCallback = $filterCallback;
21     }
22
23     /**
24      * Get found nodes satisfying the filter callback.
25      *
26      * Nodes are returned in pre-order.
27      *
28      * @return Node[] Found nodes
29      */
30     public function getFoundNodes() : array {
31         return $this->foundNodes;
32     }
33
34     public function beforeTraverse(array $nodes) {
35         $this->foundNodes = [];
36
37         return null;
38     }
39
40     public function enterNode(Node $node) {
41         $filterCallback = $this->filterCallback;
42         if ($filterCallback($node)) {
43             $this->foundNodes[] = $node;
44         }
45
46         return null;
47     }
48 }