ReflectionClass   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 7
eloc 13
c 4
b 0
f 0
dl 0
loc 47
ccs 12
cts 12
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setObject() 0 3 1
A getAnnotation() 0 10 3
A getAnnotations() 0 14 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ray\Aop;
6
7
use Ray\ServiceLocator\ServiceLocator;
8
9
use function is_string;
10
use function unserialize;
11
12
/**
13
 * @extends \ReflectionClass<object>
14
 */
15
class ReflectionClass extends \ReflectionClass implements Reader
16
{
17
    /** @var WeavedInterface|null */
18
    private $object;
19
20
    /**
21
     * Set dependencies
22
     */
23 2
    public function setObject(WeavedInterface $object): void
24
    {
25 2
        $this->object = $object;
26 2
    }
27
28
    /**
29
     * {@inheritdoc}
30
     *
31 2
     * @psalm-suppress NoInterfaceProperties
32
     */
33
    public function getAnnotations(): array
34 2
    {
35
        $object = $this->object;
36 2
        if (isset($object->classAnnotations) && is_string($object->classAnnotations)) {
0 ignored issues
show
Bug introduced by
Accessing classAnnotations on the interface Ray\Aop\WeavedInterface suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
37
            /** @var list<object> $annotations */
38
            $annotations = unserialize($object->classAnnotations, ['allowed_classes' => true]);
39
40
            return $annotations;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $annotations returns the type Ray\Aop\list which is incompatible with the type-hinted return array.
Loading history...
41
        }
42 2
43
        /** @var list<object> $annotations */
44 2
        $annotations = ServiceLocator::getReader()->getClassAnnotations(new \ReflectionClass($this->name));
45 2
46 1
        return $annotations;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $annotations returns the type Ray\Aop\list which is incompatible with the type-hinted return array.
Loading history...
47 1
    }
48
49
    /**
50
     * {@inheritdoc}
51 1
     */
52
    public function getAnnotation(string $annotationName)
53
    {
54
        $annotations = $this->getAnnotations();
55
        foreach ($annotations as $annotation) {
56
            if ($annotation instanceof $annotationName) {
57
                return $annotation;
58
            }
59
        }
60
61
        return null;
62
    }
63
}
64