Failed Conditions
Push — develop ( 856053...a7d1bd )
by Guilherme
61:28
created

MappedSuperClassMetadataBinder   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 82
Duplicated Lines 14.63 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 2
dl 12
loc 82
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 12 12 1
A bind() 0 8 1
A processMappedSuperclassAnnotation() 0 14 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\ORM\Mapping\Driver\Annotation\Binder;
6
7
use Doctrine\ORM\Annotation;
8
use Doctrine\ORM\Mapping;
9
10
/**
11
 * Class MappedSuperClassMetadataBinder
12
 *
13
 * @package Doctrine\ORM\Mapping\Driver\Annotation\Binder
14
 * @since 3.0
15
 *
16
 * @author Guilherme Blanco <[email protected]>
17
 */
18
class MappedSuperClassMetadataBinder
19
{
20
    /**
21
     * @var Mapping\ClassMetadataBuildingContext
22
     */
23
    private $metadataBuildingContext;
24
25
    /**
26
     * @var \ReflectionClass
27
     */
28
    private $reflectionClass;
29
30
    /**
31
     * [dreaming] One day we would eliminate this and only do: $reflectionClass->getAnnotations()
32
     *
33
     * @var array<string, object>
34
     */
35
    private $classAnnotations;
36
37
    /**
38
     * @todo guilhermeblanco This should disappear once we instantiation happens in the Driver
39
     *
40
     * @var Mapping\ClassMetadata
41
     */
42
    private $classMetadata;
43
44
    /**
45
     * ComponentMetadataBinder constructor.
46
     *
47
     * @param \ReflectionClass                     $reflectionClass
48
     * @param array<string, object>                $classAnnotations
49
     * @param Mapping\ClassMetadata                $classMetadata
50
     * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext
51
     */
52 View Code Duplication
    public function __construct(
53
        \ReflectionClass $reflectionClass,
54
        array $classAnnotations,
55
        Mapping\ClassMetadata $classMetadata,
56
        Mapping\ClassMetadataBuildingContext $metadataBuildingContext
57
    )
58
    {
59
        $this->reflectionClass         = $reflectionClass;
60
        $this->classAnnotations        = $classAnnotations;
61
        $this->classMetadata           = $classMetadata;
62
        $this->metadataBuildingContext = $metadataBuildingContext;
63
    }
64
65
    /**
66
     * @return Mapping\ClassMetadata
67
     *
68
     * @throws Mapping\MappingException
69
     */
70
    public function bind() : Mapping\ClassMetadata
71
    {
72
        $classMetadata = $this->classMetadata;
73
74
        $this->processMappedSuperclassAnnotation($classMetadata, $this->classAnnotations[Annotation\MappedSuperclass::class]);
75
76
        return $classMetadata;
77
    }
78
79
    /**
80
     * @param Mapping\ClassMetadata       $classMetadata
81
     * @param Annotation\MappedSuperclass $mappedSuperclassAnnotation
82
     *
83
     * @return void
84
     */
85
    private function processMappedSuperclassAnnotation(
86
        Mapping\ClassMetadata $classMetadata,
87
        Annotation\MappedSuperclass $mappedSuperclassAnnotation
88
    ) : void
89
    {
90
        if ($mappedSuperclassAnnotation->repositoryClass !== null) {
91
            $classMetadata->setCustomRepositoryClassName(
92
                $classMetadata->fullyQualifiedClassName($mappedSuperclassAnnotation->repositoryClass)
93
            );
94
        }
95
96
        $classMetadata->isMappedSuperclass = true;
97
        $classMetadata->isEmbeddedClass = false;
98
    }
99
}
100