Completed
Push — develop ( 34db25...1b1cc6 )
by Paul
02:36
created

ParameterNodeParser   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 49
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
B invoke() 0 19 5
A __construct() 0 4 1
1
<?php
2
3
namespace PhpUnitGen\Parser\NodeParser;
4
5
use PhpParser\Node;
6
use PhpUnitGen\Exception\Exception;
7
use PhpUnitGen\Model\ModelInterface\FunctionModelInterface;
8
use PhpUnitGen\Model\ParameterModel;
9
use PhpUnitGen\Model\PropertyInterface\NodeInterface;
10
11
/**
12
 * Class ParameterNodeParser.
13
 *
14
 * @author     Paul Thébaud <[email protected]>.
15
 * @copyright  2017-2018 Paul Thébaud <[email protected]>.
16
 * @license    https://opensource.org/licenses/MIT The MIT license.
17
 * @link       https://github.com/paul-thebaud/phpunit-generator
18
 * @since      Class available since Release 2.0.0.
19
 */
20
class ParameterNodeParser extends AbstractNodeParser
21
{
22
    /**
23
     * @var TypeNodeParser $typeNodeParser The type node parser.
24
     */
25
    protected $typeNodeParser;
26
27
    /**
28
     * @var ValueNodeParser $valueNodeParser The value node parser.
29
     */
30
    protected $valueNodeParser;
31
32
    /**
33
     * AttributeNodeParser constructor.
34
     *
35
     * @param TypeNodeParser  $typeNodeParser  The type node parser.
36
     * @param ValueNodeParser $valueNodeParser The value node parser.
37
     */
38
    public function __construct(TypeNodeParser $typeNodeParser, ValueNodeParser $valueNodeParser)
39
    {
40
        $this->typeNodeParser  = $typeNodeParser;
41
        $this->valueNodeParser = $valueNodeParser;
42
    }
43
44
    /**
45
     * Parse a node to update the parent node model.
46
     *
47
     * @param mixed         $node   The node to parse.
48
     * @param NodeInterface $parent The parent node.
49
     */
50
    public function invoke($node, NodeInterface $parent): void
51
    {
52
        if (! $node instanceof Node\Param || ! $parent instanceof FunctionModelInterface) {
53
            throw new Exception('ParameterNodeParser is made to parse a function parameter node');
54
        }
55
56
        $parameter = new ParameterModel();
57
        $parameter->setParentNode($parent);
58
        $parameter->setName($node->name);
59
        $parameter->setIsVariadic($node->variadic);
60
61
        if ($node->type !== null) {
62
            $this->typeNodeParser->invoke($node->type, $parameter);
63
        }
64
        if ($node->default !== null) {
65
            $this->valueNodeParser->invoke($node->default, $parameter);
66
        }
67
68
        $parent->addParameter($parameter);
69
    }
70
}
71