PropertyGenerator::generate()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 33
ccs 16
cts 16
cp 1
rs 9.392
c 0
b 0
f 0
cc 3
nc 4
nop 1
crap 3
1
<?php
2
3
namespace Leaditin\Code\Generator;
4
5
use Leaditin\Code\DocBlock;
6
use Leaditin\Code\Member\Property;
7
use Leaditin\Code\Tag;
8
9
/**
10
 * @package Leaditin\Code
11
 * @author Igor Vuckovic <[email protected]>
12
 * @license MIT
13
 */
14
class PropertyGenerator extends MemberGenerator
15
{
16
    /**
17
     * @var ValueGenerator
18
     */
19
    protected $valueGenerator;
20
21
    /**
22
     * @param DocBlockGenerator $docBlockGenerator
23
     * @param TypeGenerator $typeGenerator
24
     * @param ValueGenerator $valueGenerator
25
     * @param VisibilityGenerator $visibilityGenerator
26
     */
27 4
    public function __construct(
28
        DocBlockGenerator $docBlockGenerator,
29
        TypeGenerator $typeGenerator,
30
        ValueGenerator $valueGenerator,
31
        VisibilityGenerator $visibilityGenerator
32
    ) {
33 4
        parent::__construct($docBlockGenerator, $typeGenerator, $visibilityGenerator);
34
35 4
        $this->valueGenerator = $valueGenerator;
36 4
    }
37
38
    /**
39
     * @param Property $property
40
     *
41
     * @return string
42
     */
43 4
    public function generate(Property $property): string
44
    {
45 4
        $output = $this->generateLine(
46 4
            $this->docBlockGenerator->generate(
47 4
                new DocBlock(
48 4
                    null,
49 4
                    null,
50
                    [
51 4
                        new Tag('var', $this->typeGenerator->generate($property->type()))
52
                    ]
53
                )
54
            ),
55
            0
56
        );
57
58 4
        $line = $this->visibilityGenerator->generate($property->visibility());
59
60 4
        if ($property->isStatic()) {
61 1
            $line .= ' static';
62
        }
63
64 4
        $line .= ' $' . $property->name();
65
66 4
        if ($property->defaultValue()->value() !== null) {
67 3
            $line .= ' = ' . $this->valueGenerator->generate($property->defaultValue());
68
        }
69
70 4
        $line .= ';';
71
72 4
        $output .= $this->generateLine($line);
73
74 4
        return rtrim($output, static::END_OF_LINE);
75
    }
76
}
77