1 | <?php |
||||
2 | /** |
||||
3 | * Annotations loader |
||||
4 | * User: moyo |
||||
5 | * Date: 2018/6/4 |
||||
6 | * Time: 10:45 AM |
||||
7 | */ |
||||
8 | |||||
9 | namespace Carno\Validator\Anno; |
||||
10 | |||||
11 | use Carno\Container\Injection\Annotation; |
||||
12 | use Carno\Validator\Coordinator; |
||||
13 | use Carno\Validator\Inspector; |
||||
14 | use Carno\Validator\Valid\Executor; |
||||
15 | use ReflectionClass; |
||||
16 | use ReflectionMethod; |
||||
17 | |||||
18 | class Loader |
||||
19 | { |
||||
20 | /** |
||||
21 | * @var Coordinator |
||||
22 | */ |
||||
23 | private $coordinator = null; |
||||
24 | |||||
25 | /** |
||||
26 | * @var Inspector |
||||
27 | */ |
||||
28 | private $inspector = null; |
||||
29 | |||||
30 | /** |
||||
31 | * @var Executor |
||||
32 | */ |
||||
33 | private $builder = null; |
||||
34 | |||||
35 | /** |
||||
36 | * Loader constructor. |
||||
37 | * @param Coordinator $coordinator |
||||
38 | * @param Inspector $inspector |
||||
39 | */ |
||||
40 | public function __construct(Coordinator $coordinator, Inspector $inspector) |
||||
41 | { |
||||
42 | $this->coordinator = $coordinator; |
||||
43 | $this->inspector = $inspector; |
||||
44 | $this->builder = new Executor; |
||||
45 | } |
||||
46 | |||||
47 | /** |
||||
48 | * @param string $class |
||||
49 | */ |
||||
50 | public function parsing(string $class) : void |
||||
51 | { |
||||
52 | foreach ((new ReflectionClass($class))->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { |
||||
53 | $builder = new Executor; |
||||
54 | |||||
55 | (new Annotation($method->getDocComment()))->rowing(function (string $key, $expr) use ($builder) { |
||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||
56 | $this->acknowledge($builder, $key, $expr); |
||||
57 | }); |
||||
58 | |||||
59 | $this->coordinator->group()->stop(); |
||||
60 | |||||
61 | $this->inspector->join($class, $method->getName(), $builder); |
||||
62 | } |
||||
63 | } |
||||
64 | |||||
65 | /** |
||||
66 | * @param array $rules |
||||
67 | */ |
||||
68 | public function walking(array $rules) : void |
||||
69 | { |
||||
70 | foreach ($rules as $rule) { |
||||
71 | $this->acknowledge($this->builder, array_shift($rule), implode(' ', $rule) ?: true); |
||||
0 ignored issues
–
show
It seems like
implode(' ', $rule) ?: true can also be of type true ; however, parameter $av of Carno\Validator\Anno\Loader::acknowledge() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
72 | } |
||||
73 | } |
||||
74 | |||||
75 | /** |
||||
76 | * @param Executor $builder |
||||
77 | * @param string $ak |
||||
78 | * @param string $av |
||||
79 | */ |
||||
80 | private function acknowledge(Executor $builder, string $ak, $av) : void |
||||
81 | { |
||||
82 | switch ($ak) { |
||||
83 | case 'valid-group': |
||||
84 | $av === true |
||||
0 ignored issues
–
show
|
|||||
85 | ? $this->coordinator->group()->stop() |
||||
86 | : $this->coordinator->group()->start($av, $builder); |
||||
87 | break; |
||||
88 | case 'valid-inherit': |
||||
89 | $this->coordinator->inherit()->sync($av, $this->coordinator->group(), $builder); |
||||
90 | break; |
||||
91 | case 'valid-named': |
||||
92 | $this->coordinator->group()->attach($this->coordinator->named()->mark($av, $builder)); |
||||
93 | break; |
||||
94 | case 'valid-clone': |
||||
95 | $this->coordinator->clone()->from($av, $builder, $this->coordinator->named()); |
||||
96 | break; |
||||
97 | case 'valid': |
||||
98 | $this->coordinator->group()->attach($builder->analyzing($av)); |
||||
99 | } |
||||
100 | } |
||||
101 | } |
||||
102 |