-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
ClassMetadataBuilder.php
82 lines (60 loc) · 2.26 KB
/
ClassMetadataBuilder.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
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
<?php
declare(strict_types=1);
namespace Doctrine\ORM\Mapping\Builder;
use Doctrine\ORM\Annotation;
use Doctrine\ORM\Mapping;
use function assert;
class ClassMetadataBuilder
{
/** @var Mapping\ClassMetadataBuildingContext */
private $metadataBuildingContext;
/** @var CacheMetadataBuilder */
protected $cacheMetadataBuilder;
/** @var string */
private $className;
/** @var Mapping\ComponentMetadata */
private $parentMetadata;
/** @var Annotation\Cache|null */
protected $cacheAnnotation;
public function __construct(
Mapping\ClassMetadataBuildingContext $metadataBuildingContext,
?CacheMetadataBuilder $cacheMetadataBuilder = null
) {
$this->metadataBuildingContext = $metadataBuildingContext;
$this->cacheMetadataBuilder = $cacheMetadataBuilder ?: new CacheMetadataBuilder($metadataBuildingContext);
}
public function getClassName(string $className) : ClassMetadataBuilder
{
$this->className = $className;
return $this;
}
public function withParentMetadata(Mapping\ComponentMetadata $parentMetadata) : ClassMetadataBuilder
{
$this->parentMetadata = $parentMetadata;
return $this;
}
public function withCacheAnnotation(?Annotation\Cache $cacheAnnotation) : ClassMetadataBuilder
{
$this->cacheAnnotation = $cacheAnnotation;
if ($cacheAnnotation !== null) {
$this->cacheMetadataBuilder->withCacheAnnotation($cacheAnnotation);
}
return $this;
}
public function build() : Mapping\ClassMetadata
{
assert($this->className !== null);
$reflectionService = $this->metadataBuildingContext->getReflectionService();
$reflectionClass = $reflectionService->getClass($this->className);
$className = $reflectionClass ? $reflectionClass->getName() : $this->className;
$classMetadata = new Mapping\ClassMetadata($className, $this->parentMetadata);
$this->buildCache($classMetadata);
return $classMetadata;
}
protected function buildCache(Mapping\ClassMetadata $classMetadata) : void
{
if ($this->cacheAnnotation !== null) {
$classMetadata->setCache($this->cacheMetadataBuilder->build());
}
}
}