Passed
Push — develop ( fb709e...b69568 )
by Paul
03:14
created

MethodNodeParser::invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nc 2
nop 2
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace PhpUnitGen\Parser\NodeParser;
4
5
use PhpParser\Node;
6
use PhpUnitGen\Model\ClassModel;
7
use PhpUnitGen\Model\FunctionModel;
8
use PhpUnitGen\Model\ModelInterface\InterfaceModelInterface;
9
use PhpUnitGen\Model\ModelInterface\PhpFileModelInterface;
10
use PhpUnitGen\Model\PropertyInterface\ClassLikeInterface;
11
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\FunctionNodeParserInterface;
12
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\MethodNodeParserInterface;
13
use PhpUnitGen\Parser\NodeParser\NodeParserInterface\ParameterNodeParserInterface;
14
use PhpUnitGen\Parser\NodeParserUtil\DocumentationTrait;
15
use PhpUnitGen\Parser\NodeParserUtil\MethodVisibilityTrait;
16
17
/**
18
 * Class MethodNodeParser.
19
 *
20
 * @author     Paul Thébaud <[email protected]>.
21
 * @copyright  2017-2018 Paul Thébaud <[email protected]>.
22
 * @license    https://opensource.org/licenses/MIT The MIT license.
23
 * @link       https://github.com/paul-thebaud/phpunit-generator
24
 * @since      Class available since Release 2.0.0.
25
 */
26
class MethodNodeParser extends AbstractNodeParser implements MethodNodeParserInterface
27
{
28
    use DocumentationTrait;
29
    use MethodVisibilityTrait;
30
31
    /**
32
     * @var ParameterNodeParserInterface $parameterNodeParser The parameter node parser.
33
     */
34
    protected $parameterNodeParser;
35
36
    /**
37
     * MethodNodeParser constructor.
38
     *
39
     * @param ParameterNodeParserInterface $parameterNodeParser The parameter node parser.
40
     */
41
    public function __construct(ParameterNodeParserInterface $parameterNodeParser)
42
    {
43
        $this->parameterNodeParser = $parameterNodeParser;
44
    }
45
46
    /**
47
     * {@inheritdoc}
48
     */
49
    public function invoke(Node\Stmt\ClassMethod $node, InterfaceModelInterface $parent): InterfaceModelInterface
50
    {
51
        $function = new FunctionModel();
52
        $function->setParentNode($parent);
53
        $function->setName($node->name);
54
        $function->setDocumentation($this->getDocumentation($node));
55
        $function->setIsFinal($node->isFinal());
56
        $function->setIsStatic($node->isStatic());
57
        $function->setIsAbstract($node->isAbstract());
58
        $function->setVisibility($this->getMethodVisibility($node));
59
60
        foreach ($node->getParams() as $param) {
61
            $function = $this->parameterNodeParser->invoke($param, $function);
62
        }
63
64
        $parent->addFunction($function);
65
66
        return $parent;
67
    }
68
}