Completed
Push — develop ( 1b34c6...481302 )
by Paul
02:47
created

MethodNodeParser   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 57
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
B invoke() 0 25 3
A __construct() 0 6 1
1
<?php
2
3
namespace PhpUnitGen\Parser\NodeParser;
4
5
use PhpParser\Node;
6
use PhpUnitGen\Model\FunctionModel;
7
use PhpUnitGen\Model\ModelInterface\InterfaceModelInterface;
8
use PhpUnitGen\Model\ReturnModel;
9
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\MethodNodeParserInterface;
10
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\ParameterNodeParserInterface;
11
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\TypeNodeParserInterface;
12
use PhpUnitGen\Parser\NodeParserUtil\DocumentationTrait;
13
use PhpUnitGen\Parser\NodeParserUtil\MethodVisibilityTrait;
14
15
/**
16
 * Class MethodNodeParser.
17
 *
18
 * @author     Paul Thébaud <[email protected]>.
19
 * @copyright  2017-2018 Paul Thébaud <[email protected]>.
20
 * @license    https://opensource.org/licenses/MIT The MIT license.
21
 * @link       https://github.com/paul-thebaud/phpunit-generator
22
 * @since      Class available since Release 2.0.0.
23
 */
24
class MethodNodeParser extends AbstractNodeParser implements MethodNodeParserInterface
25
{
26
    use DocumentationTrait;
27
    use MethodVisibilityTrait;
28
29
    /**
30
     * @var ParameterNodeParserInterface $parameterNodeParser The parameter node parser.
31
     */
32
    protected $parameterNodeParser;
33
34
    /**
35
     * @var TypeNodeParserInterface $typeNodeParser The type node parser.
36
     */
37
    protected $typeNodeParser;
38
39
    /**
40
     * MethodNodeParser constructor.
41
     *
42
     * @param ParameterNodeParserInterface $parameterNodeParser The parameter node parser.
43
     * @param TypeNodeParserInterface      $typeNodeParser      The type node parser.
44
     */
45
    public function __construct(
46
        ParameterNodeParserInterface $parameterNodeParser,
47
        TypeNodeParserInterface $typeNodeParser
48
    ) {
49
        $this->parameterNodeParser = $parameterNodeParser;
50
        $this->typeNodeParser      = $typeNodeParser;
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function invoke(Node\Stmt\ClassMethod $node, InterfaceModelInterface $parent): InterfaceModelInterface
57
    {
58
        $function = new FunctionModel();
59
        $function->setParentNode($parent);
60
        $function->setName($node->name);
61
        $function->setDocumentation($this->getDocumentation($node));
62
        $function->setIsFinal($node->isFinal());
63
        $function->setIsStatic($node->isStatic());
64
        $function->setIsAbstract($node->isAbstract());
65
        $function->setVisibility($this->getMethodVisibility($node));
66
67
        foreach ($node->getParams() as $param) {
68
            $function = $this->parameterNodeParser->invoke($param, $function);
69
        }
70
71
        $return = new ReturnModel();
72
        $return->setParentNode($function);
73
        if ($node->getReturnType() !== null) {
74
            $return = $this->typeNodeParser->invoke($node->getReturnType(), $return);
75
        }
76
        $function->setReturn($return);
77
78
        $parent->addFunction($function);
79
80
        return $parent;
81
    }
82
}
83