Completed
Push — develop ( e382f7...b48d9b )
by Paul
02:10
created

AbstractFunctionNodeParser::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 3
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace PhpUnitGen\Parser\NodeParser;
4
5
use PhpParser\Node\FunctionLike;
6
use PhpUnitGen\Model\ModelInterface\FunctionModelInterface;
7
use PhpUnitGen\Model\ReturnModel;
8
9
/**
10
 * Class AbstractFunctionNodeParser.
11
 *
12
 * @author     Paul Thébaud <[email protected]>.
13
 * @copyright  2017-2018 Paul Thébaud <[email protected]>.
14
 * @license    https://opensource.org/licenses/MIT The MIT license.
15
 * @link       https://github.com/paul-thebaud/phpunit-generator
16
 * @since      Class available since Release 2.0.0.
17
 */
18
abstract class AbstractFunctionNodeParser extends AbstractNodeParser
19
{
20
    /**
21
     * @var ParameterNodeParser $parameterNodeParser The parameter node parser.
22
     */
23
    protected $parameterNodeParser;
24
25
    /**
26
     * @var TypeNodeParser $typeNodeParser The type node parser.
27
     */
28
    protected $typeNodeParser;
29
30
    /**
31
     * @var DocumentationNodeParser $documentationNodeParser The documentation node parser.
32
     */
33
    protected $documentationNodeParser;
34
35
    /**
36
     * FunctionNodeParser constructor.
37
     *
38
     * @param ParameterNodeParser     $parameterNodeParser     The parameter node parser.
39
     * @param TypeNodeParser          $typeNodeParser          The type node parser.
40
     * @param DocumentationNodeParser $documentationNodeParser The documentation node parser.
41
     */
42
    public function __construct(
43
        ParameterNodeParser $parameterNodeParser,
44
        TypeNodeParser $typeNodeParser,
45
        DocumentationNodeParser $documentationNodeParser
46
    ) {
47
        $this->parameterNodeParser     = $parameterNodeParser;
48
        $this->typeNodeParser          = $typeNodeParser;
49
        $this->documentationNodeParser = $documentationNodeParser;
50
    }
51
52
    /**
53
     * Parse a function like node to update a function model.
54
     *
55
     * @param FunctionLike           $node     The node to parse.
56
     * @param FunctionModelInterface $function The model to update.
57
     *
58
     * @return FunctionModelInterface The updated function model.
59
     */
60
    protected function parseFunction(FunctionLike $node, FunctionModelInterface $function): FunctionModelInterface
61
    {
62
        if (($documentation = $node->getDocComment()) !== null) {
63
            $function = $this->documentationNodeParser->invoke($documentation, $function);
64
        }
65
66
        foreach ($node->getParams() as $param) {
67
            $function = $this->parameterNodeParser->invoke($param, $function);
68
        }
69
70
        $return = new ReturnModel();
71
        $return->setParentNode($function);
72
        if ($node->getReturnType() !== null) {
73
            $return = $this->typeNodeParser->invoke($node->getReturnType(), $return);
74
        }
75
        $function->setReturn($return);
76
77
        return $function;
78
    }
79
}
80