ProxyFactory::supports()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace PHPRealCoverage\Proxy;
4
5
class ProxyFactory
6
{
7
    private $classes;
8
    private $proxies = array();
9
10
    /**
11
     * @param ClassMetadata[] $classes
12
     */
13
    public function __construct(array $classes)
14
    {
15
        $this->createClassHashMap($classes);
16
    }
17
18
    public function supports($classname)
19
    {
20
        return isset($this->classes[$classname]);
21
    }
22
23
    /**
24
     * @param ClassMetadata[] $classes
25
     */
26
    private function createClassHashMap(array $classes)
27
    {
28
        $this->classes = array();
29
        foreach ($classes as $class) {
30
            $this->classes[$this->getFullQualifiedClassName($class)] = $class;
31
        }
32
    }
33
34
    /**
35
     * @param ClassMetadata $class
36
     * @return string
37
     */
38
    private function getFullQualifiedClassName(ClassMetadata $class)
39
    {
40
        return '\\' . $class->getNamespace() . '\\' . $class->getName();
41
    }
42
43
    public function getProxyForName($classname)
44
    {
45
        if (!$this->supports($classname)) {
46
            throw new UnsupportedClassException("Class " . $classname . " not found");
47
        }
48
49
        if (!isset($this->proxies[$classname])) {
50
            $proxy = new ProxyAccessor($this->classes[$classname]);
51
            $proxy->load();
52
            $this->proxies[$classname] = $proxy;
53
        }
54
55
        return $this->proxies[$classname];
56
    }
57
58
    /**
59
     * @param ClassMetadata $class
60
     * @return ProxyAccessor
61
     */
62
    public function getProxy(ClassMetadata $class)
63
    {
64
        return $this->getProxyForName($this->getFullQualifiedClassName($class));
65
    }
66
}
67