|
14 | 14 | namespace phpDocumentor\Reflection\Types;
|
15 | 15 |
|
16 | 16 | use ArrayIterator;
|
17 |
| -use InvalidArgumentException; |
| 17 | +use RuntimeException; |
| 18 | +use Reflector; |
18 | 19 | use ReflectionClass;
|
19 |
| -use ReflectionClassConstant; |
20 | 20 | use ReflectionMethod;
|
21 |
| -use ReflectionParameter; |
| 21 | +use ReflectionFunction; |
22 | 22 | use ReflectionProperty;
|
23 |
| -use Reflector; |
24 |
| -use RuntimeException; |
| 23 | +use ReflectionParameter; |
| 24 | +use ReflectionAttribute; |
| 25 | +use ReflectionClassConstant; |
| 26 | +use InvalidArgumentException; |
25 | 27 | use UnexpectedValueException;
|
26 | 28 |
|
| 29 | +use const T_AS; |
| 30 | +use const T_USE; |
| 31 | +use const T_TRAIT; |
| 32 | +use const T_CLASS; |
| 33 | +use const T_STRING; |
| 34 | +use const T_NAMESPACE; |
| 35 | +use const T_CURLY_OPEN; |
| 36 | +use const T_NS_SEPARATOR; |
| 37 | +use const T_NAME_QUALIFIED; |
| 38 | +use const T_NAME_FULLY_QUALIFIED; |
| 39 | +use const T_DOLLAR_OPEN_CURLY_BRACES; |
| 40 | +use function trim; |
27 | 41 | use function define;
|
| 42 | +use function substr; |
28 | 43 | use function defined;
|
29 |
| -use function file_exists; |
30 |
| -use function file_get_contents; |
31 |
| -use function get_class; |
| 44 | +use function strrpos; |
32 | 45 | use function in_array;
|
| 46 | +use function get_class; |
33 | 47 | use function is_string;
|
34 |
| -use function strrpos; |
35 |
| -use function substr; |
| 48 | +use function file_exists; |
36 | 49 | use function token_get_all;
|
37 |
| -use function trim; |
38 |
| - |
39 |
| -use const T_AS; |
40 |
| -use const T_CLASS; |
41 |
| -use const T_CURLY_OPEN; |
42 |
| -use const T_DOLLAR_OPEN_CURLY_BRACES; |
43 |
| -use const T_NAME_FULLY_QUALIFIED; |
44 |
| -use const T_NAME_QUALIFIED; |
45 |
| -use const T_NAMESPACE; |
46 |
| -use const T_NS_SEPARATOR; |
47 |
| -use const T_STRING; |
48 |
| -use const T_TRAIT; |
49 |
| -use const T_USE; |
| 50 | +use function file_get_contents; |
50 | 51 |
|
51 | 52 | if (!defined('T_NAME_QUALIFIED')) {
|
52 | 53 | define('T_NAME_QUALIFIED', 10001);
|
@@ -103,6 +104,14 @@ public function createFromReflector(Reflector $reflector): Context
|
103 | 104 | return $this->createFromReflectionClassConstant($reflector);
|
104 | 105 | }
|
105 | 106 |
|
| 107 | + if ($reflector instanceof ReflectionFunction) { |
| 108 | + return $this->createFromReflectionFunction($reflector); |
| 109 | + } |
| 110 | + |
| 111 | + if ($reflector instanceof ReflectionAttribute) { |
| 112 | + return $this->createFromReflectionAttribute($reflector); |
| 113 | + } |
| 114 | + |
106 | 115 | throw new UnexpectedValueException('Unhandled \Reflector instance given: ' . get_class($reflector));
|
107 | 116 | }
|
108 | 117 |
|
@@ -159,6 +168,31 @@ private function createFromReflectionClass(ReflectionClass $class): Context
|
159 | 168 | return new Context($namespace, []);
|
160 | 169 | }
|
161 | 170 |
|
| 171 | + private function createFromReflectionFunction(ReflectionFunction $function): Context |
| 172 | + { |
| 173 | + $fileName = $function->getFileName(); |
| 174 | + $namespace = $function->getNamespaceName(); |
| 175 | + |
| 176 | + if (is_string($fileName) && file_exists($fileName)) { |
| 177 | + $contents = file_get_contents($fileName); |
| 178 | + if ($contents === false) { |
| 179 | + throw new RuntimeException('Unable to read file "' . $fileName . '"'); |
| 180 | + } |
| 181 | + |
| 182 | + return $this->createForNamespace($namespace, $contents); |
| 183 | + } |
| 184 | + |
| 185 | + return new Context($namespace, []); |
| 186 | + } |
| 187 | + |
| 188 | + private function createFromReflectionAttribute(ReflectionAttribute $attribute): Context |
| 189 | + { |
| 190 | + $name = $attribute->getName(); |
| 191 | + $class = new ReflectionClass($name); |
| 192 | + |
| 193 | + return $this->createFromReflectionClass($class); |
| 194 | + } |
| 195 | + |
162 | 196 | /**
|
163 | 197 | * Build a Context for a namespace in the provided file contents.
|
164 | 198 | *
|
|
0 commit comments