Passed
Push — master ( 9630dc...59d7dc )
by Jesús
03:24 queued 18s
created

ClassNameFinder   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 31
ccs 11
cts 12
cp 0.9167
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A findClassName() 0 15 4
A __construct() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gacela\Framework\ClassResolver\ClassNameFinder;
6
7
use Gacela\Framework\ClassResolver\ClassInfo;
8
use Gacela\Framework\ClassResolver\ClassNameFinder\Rule\FinderRuleInterface;
9
10
final class ClassNameFinder implements ClassNameFinderInterface
11
{
12
    /** @var array<string,array<string,string>> */
13
    private static array $cachedClassNames = [];
14
15
    /** @var list<FinderRuleInterface> */
16
    private array $finderRules;
17
18
    /**
19
     * @param list<FinderRuleInterface> $finderRules
20
     */
21 15
    public function __construct(array $finderRules)
22
    {
23 15
        $this->finderRules = $finderRules;
24 15
    }
25
26 15
    public function findClassName(ClassInfo $classInfo, string $resolvableType): ?string
27
    {
28 15
        if (isset(self::$cachedClassNames[$classInfo->toString()][$resolvableType])) {
29
            return self::$cachedClassNames[$classInfo->toString()][$resolvableType];
30
        }
31
32 15
        foreach ($this->finderRules as $finderRule) {
33 15
            $className = $finderRule->buildClassCandidate($classInfo, $resolvableType);
34 15
            if (class_exists($className)) {
35 14
                self::$cachedClassNames[$classInfo->toString()][$resolvableType] = $className;
36 14
                return $className;
37
            }
38
        }
39
40 3
        return null;
41
    }
42
}
43