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

Traverser   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 44
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A traverseClonedNodes() 0 4 1
A traverse() 0 4 1
A cloneNodes() 0 4 1
A makeTraverser() 0 9 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