AnnotationDriver   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 4
dl 0
loc 54
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
B loadMetadataForClass() 0 38 6
1
<?php
2
3
namespace Psi\Component\ContentType\Metadata\Driver;
4
5
use Doctrine\Common\Annotations\Reader;
6
use Metadata\Driver\DriverInterface;
7
use Psi\Component\ContentType\Metadata\Annotations;
8
use Psi\Component\ContentType\Metadata\ClassMetadata;
9
use Psi\Component\ContentType\Metadata\PropertyMetadata;
10
11
class AnnotationDriver implements DriverInterface
12
{
13
    /**
14
     * @var Reader
15
     */
16
    private $reader;
17
18
    public function __construct(Reader $reader)
19
    {
20
        $this->reader = $reader;
21
    }
22
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function loadMetadataForClass(\ReflectionClass $class)
27
    {
28
        $metadata = new ClassMetadata($class->getName());
29
        $propertyMetadata = [];
30
31
        foreach ($class->getProperties() as $reflProperty) {
32
            $annotations = $this->reader->getPropertyAnnotations($reflProperty);
33
34
            foreach ($annotations as $annotation) {
35
                if ($annotation instanceof Annotations\Field) {
36
                    $propertyMetadata = new PropertyMetadata(
37
                        $class->getName(),
38
                        $reflProperty->getName(),
39
                        $annotation->type,
40
                        $annotation->role,
41
                        $annotation->group,
42
                        [
43
                            'shared' => $annotation->shared,
44
                            'form' => $annotation->form,
45
                            'view' => $annotation->view,
46
                            'storage' => $annotation->storage,
47
                        ]
48
                    );
49
                    $propertyMetadatas[] = $propertyMetadata;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$propertyMetadatas was never initialized. Although not strictly required by PHP, it is generally a good practice to add $propertyMetadatas = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
50
                }
51
            }
52
        }
53
54
        if (empty($propertyMetadatas)) {
55
            return;
56
        }
57
58
        foreach ($propertyMetadatas as $propertyMetadata) {
59
            $metadata->addPropertyMetadata($propertyMetadata);
60
        }
61
62
        return $metadata;
63
    }
64
}
65