Completed
Push — master ( 28256c...92a7d3 )
by Peter
20:38
created

UseResolver::resolve()   C

Complexity

Conditions 8
Paths 9

Size

Total Lines 40
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 26
CRAP Score 8.0032

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 40
ccs 26
cts 27
cp 0.963
rs 5.3846
cc 8
eloc 21
nc 9
nop 2
crap 8.0032
1
<?php
2
3
/**
4
 * This software package is licensed under AGPL, Commercial license.
5
 *
6
 * @package maslosoft/addendum
7
 * @licence AGPL, Commercial
8
 * @copyright Copyright (c) Piotr Masełkowski <[email protected]> (Meta container, further improvements, bugfixes)
9
 * @copyright Copyright (c) Maslosoft (Meta container, further improvements, bugfixes)
10
 * @copyright Copyright (c) Jan Suchal (Original version, builder, parser)
11
 * @link http://maslosoft.com/addendum/ - maslosoft addendum
12
 * @link https://code.google.com/p/addendum/ - original addendum project
13
 */
14
15
namespace Maslosoft\Addendum\Utilities;
16
17
use Maslosoft\Addendum\Builder\DocComment;
18
use Maslosoft\Addendum\Utilities\NameNormalizer;
19
use Reflector;
20
21
/**
22
 * UseResolver
23
 *
24
 * @author Piotr Maselkowski <pmaselkowski at gmail.com>
25
 */
26
class UseResolver
27
{
28
29
	/**
30
	 * Resolve class alias
31
	 * @param Reflector $reflection
32
	 * @param string $className
33
	 * @return string
34
	 */
35 13
	public static function resolve(Reflector $reflection, $className)
36
	{
37 13
		$docs = (new DocComment())->forClass($reflection);
38 13
		$use = $docs['use'];
39 13
		$ns = $docs['namespace'];
40 13
		$aliases = $docs['useAliases'];
41
42
		// Resolve to itself with keywords
43 13
		if ($className === 'self' || $className === 'static')
44 13
		{
45 1
			$fqn = $ns . '\\' . $docs['className'];
46 1
			return $fqn;
47
		}
48
49
		// This is for same namespaced class as current class
50 13
		$aliases[$ns . '\\' . $className] = $className;
51
52 13
		if (in_array($className, $use))
53 13
		{
54 4
			return $className;
55
		}
56 11
		foreach ($use as $useClause)
57
		{
58 11
			$patternClass = preg_quote($className);
59 11
			$pattern = "~\\\\$patternClass$~";
60 11
			if (preg_match($pattern, $useClause))
61 11
			{
62 5
				return $useClause;
63
			}
64 11
		}
65 7
		foreach ($aliases as $useClause => $alias)
66
		{
67 7
			if ($className == $alias)
68 7
			{
69 7
				NameNormalizer::normalize($useClause, false);
70 7
				return $useClause;
71
			}
72 1
		}
73
		return $className;
74
	}
75
76
}
77