-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAnnotationReader.php
More file actions
150 lines (137 loc) · 5.52 KB
/
AnnotationReader.php
File metadata and controls
150 lines (137 loc) · 5.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php
/**
* This file is part of Blitz PHP framework.
*
* (c) 2022 Dimitri Sitchet Tomkeu <devcode.dst@gmail.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace BlitzPHP\Annotations;
use mindplay\annotations\AnnotationCache;
use mindplay\annotations\AnnotationException;
use mindplay\annotations\Annotations;
use mindplay\annotations\IAnnotation;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
/**
* Classe permettant de lire les differentes annotations
*/
class AnnotationReader
{
/**
* La seule instance d'utilisation de la classe
*
* @var object
*/
protected static $_instance;
/**
* Vérifie, instancie et renvoie la seule instance de la classe appelée.
*
* @return static
*/
public static function instance()
{
if (! (static::$_instance instanceof static)) {
$params = func_get_args();
static::$_instance = new static(...$params);
}
return static::$_instance;
}
/**
* Constructeur
*/
protected function __construct()
{
$cacheDir = rtrim(sys_get_temp_dir(), '/\\') . DIRECTORY_SEPARATOR . 'blitz-php' . DIRECTORY_SEPARATOR . 'annotations';
if (! is_dir($cacheDir)) {
mkdir($cacheDir, 0o777, true);
}
Annotations::$config['cache'] = new AnnotationCache($cacheDir);
AnnotationPackager::register(Annotations::getManager());
}
/**
* Inspecte les annotations appliquées à une classe donnée
*
* @param object|ReflectionClass|string $class Un nom de classe, un objet ou une instance de ReflectionClass
* @param string $type Un nom de classe/interface d'annotation facultatif - si spécifié, seules les annotations du type donné sont renvoyées.
* Alternativement, le préfixe avec "@" invoque la résolution de nom (vous permettant d'interroger par nom d'annotation.)
*
* @return Annotation[] Instances d'annotation
*
* @throws AnnotationException si un nom de classe donné n'est pas défini
*/
public static function fromClass($class, ?string $type = null)
{
return self::instance()->ofClass($class, $type);
}
/**
* Inspecte les annotations appliquées à une méthode donnée
*
* @param object|ReflectionClass|ReflectionMethod|string $class Un nom de classe, un objet, une ReflectionClass ou une instance de ReflectionMethod
* @param string|null $method Le nom d'une méthode de la classe donnée (ou null, si le premier paramètre est une ReflectionMethod)
* @param string $type Un nom facultatif de classe/d'interface d'annotation - si spécifié, seules les annotations du type donné sont renvoyées.
* Alternativement, le préfixe avec "@" invoque la résolution de nom (vous permettant d'interroger par nom d'annotation.)
*
* @return IAnnotation[] liste des objets Annotation
*
* @throws AnnotationException pour une méthode ou un nom de classe non défini
*/
public static function fromMethod($class, ?string $method, ?string $type = null)
{
return self::instance()->ofMethod($class, $method, $type);
}
/**
* Inspecte les annotations appliquées à une propriété donnée
*
* @param object|ReflectionClass|ReflectionProperty|string $class Un nom de classe, un objet, une ReflectionClass ou une instance de ReflectionProperty
* @param string|null $property Le nom d'une propriété définie de la classe donnée (ou null, si le premier paramètre est une ReflectionProperty)
* @param string $type Un nom de classe/interface d'annotation facultatif - si spécifié, seules les annotations du type donné sont renvoyées.
* Alternativement, le préfixe avec "@" invoque la résolution de nom (vous permettant d'interroger par nom d'annotation.)
*
* @return IAnnotation[] liste des objets Annotation
*
* @throws AnnotationException pour un nom de classe non défini
*/
public static function formProperty($class, ?string $property, ?string $type = null)
{
return self::instance()->ofProperty($class, $property, $type);
}
/**
* Inspecte les annotations appliquées à une classe donnée
*
* @see self::fromClass()
*
* @param mixed $class
* @param mixed|null $type
*/
private function ofClass($class, $type = null)
{
return Annotations::ofClass($class, $type);
}
/**
* Inspecte les annotations appliquées à une méthode donnée
*
* @see self::fromMethod()
*
* @param mixed $class
* @param mixed|null $type
*/
private function ofMethod($class, ?string $method, $type = null)
{
return Annotations::ofMethod($class, $method, $type);
}
/**
* Inspecte les annotations appliquées à une proprieté donnée
*
* @see self::fromProperty()
*
* @param mixed $class
* @param mixed|null $type
*/
private function ofProperty($class, ?string $property, $type = null)
{
return Annotations::ofProperty($class, $property, $type);
}
}