forked from doctrine/annotations
/
TargetValidator.php
51 lines (39 loc) · 1.25 KB
/
TargetValidator.php
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
<?php
declare(strict_types=1);
namespace Doctrine\Annotations\Assembler\Validator;
use Doctrine\Annotations\Assembler\Validator\Exception\InvalidTarget;
use Doctrine\Annotations\Metadata\AnnotationMetadata;
use Doctrine\Annotations\Parser\Scope;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
final class TargetValidator
{
/**
* @throws InvalidTarget
*/
public function validate(AnnotationMetadata $metadata, Scope $scope) : void
{
$target = $metadata->getTarget();
if ($target->all()) {
return;
}
if ($scope->isNested()) {
if (! $target->annotation()) {
throw InvalidTarget::annotation($metadata);
}
return;
}
$subject = $scope->getSubject();
if ($subject instanceof ReflectionClass && ! $target->class()) {
throw InvalidTarget::class($metadata);
}
if ($subject instanceof ReflectionProperty && ! $target->property()) {
throw InvalidTarget::property($metadata);
}
if ($subject instanceof ReflectionMethod && ! $target->method()) {
throw InvalidTarget::method($metadata);
}
// TODO validate annotation target
}
}