Completed
Pull Request — master (#221)
by personal
04:09
created

NamespaceReplacer::replace()   C

Complexity

Conditions 7
Paths 5

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 15
nc 5
nop 1
dl 0
loc 28
rs 6.7272
c 1
b 0
f 0
1
<?php
2
3
/*
4
 * (c) Jean-François Lépine <https://twitter.com/Halleck45>
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
namespace Hal\Component\Parser\Helper;
11
12
13
use Hal\Component\Parser\Resolver\NamespaceResolver;
14
use Hal\Component\Token\Token;
15
16
class NamespaceReplacer
17
{
18
19
    /**
20
     * @var NamespaceResolver
21
     */
22
    private $namespaceResolver;
23
24
    /**
25
     * NamespaceReplacer constructor.
26
     * @param NamespaceResolver $namespaceResolver
27
     */
28
    public function __construct(NamespaceResolver $namespaceResolver)
29
    {
30
        $this->namespaceResolver = $namespaceResolver;
31
    }
32
33
    /**
34
     * Replace namespaces and aliases in tokens
35
     *
36
     * @param $tokens
37
     * @return mixed
38
     */
39
    public function replace($tokens)
40
    {
41
        $len = sizeof($tokens);
42
        $aliases = $this->namespaceResolver->all();
43
        $replaced = array();
44
45
        for ($i = 0; $i < $len; $i++) {
46
47
            // remove uses
48
            if (Token::T_USE == $tokens[$i]) {
49
                $i++;
50
                if (isset($tokens[$i + 1]) && Token::T_AS == $tokens[$i + 1]) {
51
                    $i = $i + 2;
52
                }
53
                continue;
54
            }
55
56
            // replace aliases
57
            foreach ($aliases as $alias => $name) {
58
                if ($alias === $tokens[$i]) {
59
                    $tokens[$i] = $name;
60
                }
61
            }
62
63
            array_push($replaced, $tokens[$i]);
64
        }
65
        return $replaced;
66
    }
67
68
}