ReflectionClass::getAnnotation()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 5
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 10
ccs 3
cts 3
cp 1
crap 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ray\Aop;
6
7
use Ray\ServiceLocator\ServiceLocator;
8
use ReturnTypeWillChange;
0 ignored issues
show
Bug introduced by
The type ReturnTypeWillChange was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
10
use function get_class_methods;
11
12
/**
13
 * @template T of object
14
 * @template-extends \ReflectionClass<T>
15
 */
16
class ReflectionClass extends \ReflectionClass implements Reader
17
{
18
    /**
19
     * {@inheritDoc}
20
     *
21
     * @psalm-suppress NoInterfaceProperties
22
     */
23 2
    public function getAnnotations(): array
24
    {
25 2
        /** @var list<object> $annotations */
26 2
        $annotations = ServiceLocator::getReader()->getClassAnnotations(new \ReflectionClass($this->name));
27
28
        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...
29
    }
30
31 2
    /**
32
     * {@inheritDoc}
33
     */
34 2
    public function getAnnotation(string $annotationName)
35
    {
36 2
        $annotations = $this->getAnnotations();
37
        foreach ($annotations as $annotation) {
38
            if ($annotation instanceof $annotationName) {
39
                return $annotation;
40
            }
41
        }
42 2
43
        return null;
44 2
    }
45 2
46 1
    /**
47 1
     * @param int|null $filter
48
     *
49
     * @return list<ReflectionMethod>
0 ignored issues
show
Bug introduced by
The type Ray\Aop\list was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
50
     *
51 1
     * @psalm-external-mutation-free
52
     */
53
    public function getMethods($filter = null): array
54
    {
55
        unset($filter);
56
        $methods = [];
57
        $methodNames = get_class_methods($this->name);
58
        foreach ($methodNames as $methodName) {
59
            $methods[] = new ReflectionMethod($this->name, $methodName);
60
        }
61
62
        return $methods;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $methods returns the type Ray\Aop\ReflectionMethod[]|array which is incompatible with the documented return type Ray\Aop\list.
Loading history...
63
    }
64
65
    /**
66
     * @psalm-suppress MethodSignatureMismatch
67
     * @psalm-external-mutation-free
68
     */
69
    public function getConstructor(): ?ReflectionMethod
70
    {
71
        $parent = parent::getConstructor();
72
        if ($parent === null) {
73
            return null;
74
        }
75
76
        return new ReflectionMethod($parent->class, $parent->name);
77
    }
78
79
    /**
80
     * @return ReflectionClass<object>|false
81
     *
82
     * @psalm-external-mutation-free
83
     */
84
    #[ReturnTypeWillChange]
85
    public function getParentClass()
86
    {
87
        $parent = \ReflectionClass::getParentClass();
88
89
        return $parent instanceof \ReflectionClass ? (new ReflectionClass($parent->getName())) : false;
0 ignored issues
show
introduced by
$parent is always a sub-type of ReflectionClass.
Loading history...
90
    }
91
}
92