Passed
Push — master ( deecf0...b54cbd )
by Luis
03:32
created

TokenParser   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 38
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 1
A parse() 0 7 2
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
29
    /** @var StructureBuilder */
30
    private $builder;
31
32 72
    public function __construct(
33
        Definitions $definitions = null,
34
        RelationsResolver $resolver = null,
35
        StructureBuilder $builder = null
36
    ) {
37 72
        $this->definitions = $definitions ?? new Definitions();
38 72
        $this->resolver = $resolver ?? new RelationsResolver();
39 72
        $this->builder = $builder ?? new StructureBuilder();
40 72
        $this->parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP5);
41 72
        $this->traverser = new NodeTraverser();
42 72
        $this->traverser->addVisitor(new ClassVisitor($this->definitions, new ClassBuilder()));
43 72
        $this->traverser->addVisitor(new InterfaceVisitor($this->definitions, new InterfaceBuilder()));
44 72
    }
45
46 60
    public function parse(CodeFinder $finder): Structure
47
    {
48 60
        foreach ($finder->files() as $code) {
49 54
            $this->traverser->traverse($this->parser->parse($code));
50
        }
51 60
        $this->resolver->resolve($this->definitions);
52 60
        return $this->builder->buildFromDefinitions($this->definitions);
53
    }
54
}
55