ClassDefinitionMapMerger::mergeProperties()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 7
c 1
b 0
f 1
dl 0
loc 17
rs 10
cc 3
nc 3
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Jellyfish\Transfer\Definition;
6
7
use function array_key_exists;
8
9
class ClassDefinitionMapMerger implements ClassDefinitionMapMergerInterface
10
{
11
    /**
12
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface[] $classDefinitionMapA
13
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface[] $classDefinitionMapB
14
     *
15
     * @return \Jellyfish\Transfer\Definition\ClassDefinitionInterface[]
16
     */
17
    public function merge(array $classDefinitionMapA, array $classDefinitionMapB): array
18
    {
19
        foreach ($classDefinitionMapB as $classDefinitionName => $classDefinition) {
20
            if (!array_key_exists($classDefinitionName, $classDefinitionMapA)) {
21
                $classDefinitionMapA[$classDefinitionName] = $classDefinition;
22
                continue;
23
            }
24
25
            $this->mergeProperties($classDefinitionMapA[$classDefinitionName], $classDefinition);
26
        }
27
28
        return $classDefinitionMapA;
29
    }
30
31
    /**
32
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface $classDefinitionA
33
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface $classDefinitionB
34
     *
35
     * @return \Jellyfish\Transfer\Definition\ClassDefinitionMapMergerInterface
36
     */
37
    protected function mergeProperties(
38
        ClassDefinitionInterface $classDefinitionA,
39
        ClassDefinitionInterface $classDefinitionB
40
    ): ClassDefinitionMapMergerInterface {
41
        $classPropertyDefinitionMapA = $classDefinitionA->getProperties();
42
43
        foreach ($classDefinitionB->getProperties() as $classPropertyDefinitionName => $classPropertyDefinition) {
44
            if (array_key_exists($classPropertyDefinitionName, $classPropertyDefinitionMapA)) {
45
                continue;
46
            }
47
48
            $classPropertyDefinitionMapA[$classPropertyDefinitionName] = $classPropertyDefinition;
49
        }
50
51
        $classDefinitionA->setProperties($classPropertyDefinitionMapA);
52
53
        return $this;
54
    }
55
}
56