Passed
Push — parser-refactoring ( e758c6...b54cbd )
by Luis
11:11
created

TokenParser::startMethodDefinition()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 5.0342

Importance

Changes 0
Metric Value
cc 5
eloc 9
nc 5
nop 1
dl 0
loc 11
ccs 8
cts 9
cp 0.8889
crap 5.0342
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * PHP version 7.1
4
 *
5
 * This source file is subject to the license that is bundled with this package in the file LICENSE.
6
 */
7
namespace PhUml\Parser;
8
9
use PhpParser\NodeTraverser;
10
use PhpParser\ParserFactory;
11
use PhUml\Code\Structure;
12
use PhUml\Parser\Builders\ClassBuilder;
13
use PhUml\Parser\Builders\InterfaceBuilder;
14
15
class TokenParser
16
{
17
    /** @var Definitions */
18
    private $definitions;
19
20
    /** @var RelationsResolver */
21
    private $resolver;
22
23
    /** @var \PhpParser\Parser */
24
    private $parser;
25
26
    /** @var NodeTraverser */
27
    private $traverser;
28 30
29
    /** @var StructureBuilder */
30
    private $builder;
31
32
    public function __construct(
33 30
        Definitions $definitions = null,
34 30
        RelationsResolver $resolver = null,
35 30
        StructureBuilder $builder = null
36 30
    ) {
37
        $this->definitions = $definitions ?? new Definitions();
38 30
        $this->resolver = $resolver ?? new RelationsResolver();
39
        $this->builder = $builder ?? new StructureBuilder();
40 30
        $this->parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP5);
41 30
        $this->traverser = new NodeTraverser();
42 30
        $this->traverser->addVisitor(new ClassVisitor($this->definitions, new ClassBuilder()));
43 30
        $this->traverser->addVisitor(new InterfaceVisitor($this->definitions, new InterfaceBuilder()));
44 30
    }
45 30
46
    public function parse(CodeFinder $finder): Structure
47 30
    {
48 30
        foreach ($finder->files() as $code) {
49
            $this->traverser->traverse($this->parser->parse($code));
50
        }
51 30
        $this->resolver->resolve($this->definitions);
52
        return $this->builder->buildFromDefinitions($this->definitions);
53 30
    }
54
}
55