Test Setup Failed
Push — master ( 4d8696...980fb9 )
by Valentin
05:05
created

Traverser::traverse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
/**
4
 * Spiral Framework.
5
 *
6
 * @license MIT
7
 * @author  Valentin V (Vvval)
8
 */
9
declare(strict_types=1);
10
11
namespace Cycle\ORM\Promise;
12
13
use PhpParser\Node;
14
use PhpParser\NodeTraverser;
15
use PhpParser\NodeVisitor;
16
17
final class Traverser
18
{
19
    /**
20
     * @param Node[]      $nodes
21
     * @param NodeVisitor ...$visitors
22
     * @return Node[]
23
     */
24
    public function traverseClonedNodes(array $nodes, NodeVisitor ...$visitors): array
25
    {
26
        return $this->makeTraverser(...$visitors)->traverse($this->cloneNodes($nodes));
27
    }
28
29
    /**
30
     * @param array       $nodes
31
     * @param NodeVisitor ...$visitors
32
     */
33
    public function traverse(array $nodes, NodeVisitor ...$visitors): void
34
    {
35
        $this->makeTraverser(...$visitors)->traverse($nodes);
36
    }
37
38
    /**
39
     * @param Node[] $nodes
40
     * @return Node[]
41
     */
42
    private function cloneNodes(array $nodes): array
43
    {
44
        return $this->makeTraverser(new NodeVisitor\CloningVisitor())->traverse($nodes);
45
    }
46
47
    /**
48
     * @param NodeVisitor ...$visitors
49
     * @return NodeTraverser
50
     */
51
    private function makeTraverser(NodeVisitor ...$visitors): NodeTraverser
52
    {
53
        $traverser = new NodeTraverser();
54
        foreach ($visitors as $visitor) {
55
            $traverser->addVisitor($visitor);
56
        }
57
58
        return $traverser;
59
    }
60
}
61