ReflectionClass::getAnnotations()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 14
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 6
c 3
b 0
f 0
dl 0
loc 14
ccs 6
cts 6
cp 1
rs 10
cc 3
nc 2
nop 0
crap 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