Completed
Push — master ( 423aca...75042c )
by Valentin
02:20
created

Traverser   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 2
dl 0
loc 33
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A traverseClonedNodes() 0 4 1
A cloneNodes() 0 4 1
A makeTraverser() 0 9 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Cycle\ORM\Promise;
5
6
use PhpParser\Node;
7
use PhpParser\NodeTraverser;
8
use PhpParser\NodeVisitor;
9
10
final class Traverser
11
{
12
    /**
13
     * @param Node\Stmt[] $nodes
14
     * @param NodeVisitor ...$visitors
15
     *
16
     * @return Node[]
17
     */
18
    public function traverseClonedNodes(array $nodes, NodeVisitor ...$visitors): array
19
    {
20
        return $this->makeTraverser(...$visitors)->traverse($this->cloneNodes($nodes));
21
    }
22
23
    /**
24
     * @param Node[] $nodes
25
     *
26
     * @return Node[]
27
     */
28
    private function cloneNodes(array $nodes): array
29
    {
30
        return $this->makeTraverser(new NodeVisitor\CloningVisitor())->traverse($nodes);
31
    }
32
33
    private function makeTraverser(NodeVisitor ...$visitors): NodeTraverser
34
    {
35
        $traverser = new NodeTraverser();
36
        foreach ($visitors as $visitor) {
37
            $traverser->addVisitor($visitor);
38
        }
39
40
        return $traverser;
41
    }
42
}