comparison vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents
children
comparison
equal deleted inserted replaced
12:7a779792577d 13:5fb285c0d0e3
1 <?php declare(strict_types=1);
2
3 namespace PhpParser;
4
5 use PhpParser\NodeVisitor\FindingVisitor;
6 use PhpParser\NodeVisitor\FirstFindingVisitor;
7
8 class NodeFinder
9 {
10 /**
11 * Find all nodes satisfying a filter callback.
12 *
13 * @param Node|Node[] $nodes Single node or array of nodes to search in
14 * @param callable $filter Filter callback: function(Node $node) : bool
15 *
16 * @return Node[] Found nodes satisfying the filter callback
17 */
18 public function find($nodes, callable $filter) : array {
19 if (!is_array($nodes)) {
20 $nodes = [$nodes];
21 }
22
23 $visitor = new FindingVisitor($filter);
24
25 $traverser = new NodeTraverser;
26 $traverser->addVisitor($visitor);
27 $traverser->traverse($nodes);
28
29 return $visitor->getFoundNodes();
30 }
31
32 /**
33 * Find all nodes that are instances of a certain class.
34 *
35 * @param Node|Node[] $nodes Single node or array of nodes to search in
36 * @param string $class Class name
37 *
38 * @return Node[] Found nodes (all instances of $class)
39 */
40 public function findInstanceOf($nodes, string $class) : array {
41 return $this->find($nodes, function ($node) use ($class) {
42 return $node instanceof $class;
43 });
44 }
45
46 /**
47 * Find first node satisfying a filter callback.
48 *
49 * @param Node|Node[] $nodes Single node or array of nodes to search in
50 * @param callable $filter Filter callback: function(Node $node) : bool
51 *
52 * @return null|Node Found node (or null if none found)
53 */
54 public function findFirst($nodes, callable $filter) {
55 if (!is_array($nodes)) {
56 $nodes = [$nodes];
57 }
58
59 $visitor = new FirstFindingVisitor($filter);
60
61 $traverser = new NodeTraverser;
62 $traverser->addVisitor($visitor);
63 $traverser->traverse($nodes);
64
65 return $visitor->getFoundNode();
66 }
67
68 /**
69 * Find first node that is an instance of a certain class.
70 *
71 * @param Node|Node[] $nodes Single node or array of nodes to search in
72 * @param string $class Class name
73 *
74 * @return null|Node Found node, which is an instance of $class (or null if none found)
75 */
76 public function findFirstInstanceOf($nodes, string $class) {
77 return $this->findFirst($nodes, function ($node) use ($class) {
78 return $node instanceof $class;
79 });
80 }
81 }