Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / nikic / php-parser / lib / PhpParser / NodeFinder.php
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php b/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php
new file mode 100644 (file)
index 0000000..2e7cfda
--- /dev/null
@@ -0,0 +1,81 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser;
+
+use PhpParser\NodeVisitor\FindingVisitor;
+use PhpParser\NodeVisitor\FirstFindingVisitor;
+
+class NodeFinder
+{
+    /**
+     * Find all nodes satisfying a filter callback.
+     *
+     * @param Node|Node[] $nodes  Single node or array of nodes to search in
+     * @param callable    $filter Filter callback: function(Node $node) : bool
+     *
+     * @return Node[] Found nodes satisfying the filter callback
+     */
+    public function find($nodes, callable $filter) : array {
+        if (!is_array($nodes)) {
+            $nodes = [$nodes];
+        }
+
+        $visitor = new FindingVisitor($filter);
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+        $traverser->traverse($nodes);
+
+        return $visitor->getFoundNodes();
+    }
+
+    /**
+     * Find all nodes that are instances of a certain class.
+     *
+     * @param Node|Node[] $nodes Single node or array of nodes to search in
+     * @param string      $class Class name
+     *
+     * @return Node[] Found nodes (all instances of $class)
+     */
+    public function findInstanceOf($nodes, string $class) : array {
+        return $this->find($nodes, function ($node) use ($class) {
+            return $node instanceof $class;
+        });
+    }
+
+    /**
+     * Find first node satisfying a filter callback.
+     *
+     * @param Node|Node[] $nodes  Single node or array of nodes to search in
+     * @param callable    $filter Filter callback: function(Node $node) : bool
+     *
+     * @return null|Node Found node (or null if none found)
+     */
+    public function findFirst($nodes, callable $filter) {
+        if (!is_array($nodes)) {
+            $nodes = [$nodes];
+        }
+
+        $visitor = new FirstFindingVisitor($filter);
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+        $traverser->traverse($nodes);
+
+        return $visitor->getFoundNode();
+    }
+
+    /**
+     * Find first node that is an instance of a certain class.
+     *
+     * @param Node|Node[] $nodes  Single node or array of nodes to search in
+     * @param string      $class Class name
+     *
+     * @return null|Node Found node, which is an instance of $class (or null if none found)
+     */
+    public function findFirstInstanceOf($nodes, string $class) {
+        return $this->findFirst($nodes, function ($node) use ($class) {
+            return $node instanceof $class;
+        });
+    }
+}