Passed
Pull Request — 2.1 (#71)
by Vincent
14:21 queued 08:17
created

ClassNameResolver::addUse()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Bdf\Prime\Query\Closure;
4
5
use PhpParser\Node\Name;
6
use PhpParser\Node\Stmt\UseUse;
7
8
/**
9
 * Utility class for resolve fully qualified class name from name node
10
 */
11
final class ClassNameResolver
12
{
13
    private ?string $namespace = null;
14
    private array $uses = [];
15
16
    /**
17
     * Define the current namespace
18
     *
19
     * @param string|null $namespace
20
     */
21 25
    public function setNamespace(?string $namespace): void
22
    {
23 25
        $this->namespace = $namespace;
24
    }
25
26
    /**
27
     * Declare a use statement
28
     *
29
     * @param UseUse $use
30
     * @return void
31
     */
32 25
    public function addUse(UseUse $use): void
33
    {
34 25
        $alias = $use->alias ? $use->alias->toString() : $use->name->getLast();
35 25
        $this->uses[$alias] = $use->name->toString();
36
    }
37
38
    /**
39
     * Try to resolve the fully qualified class name
40
     *
41
     * @param Name $name The name node to resolve
42
     * @return string Fully qualified class name
43
     */
44 1
    public function resolve(Name $name): string
45
    {
46 1
        if ($name instanceof Name\FullyQualified) {
47
            return $name->toString();
48
        }
49
50 1
        $nameStr = $name->toString();
51
52 1
        if (isset($this->uses[$nameStr])) {
53 1
            return $this->uses[$nameStr];
54
        }
55
56 1
        if ($this->namespace) {
57 1
            return $this->namespace . '\\' . $nameStr;
58
        }
59
60
        return $name;
61
    }
62
}
63