Completed
Push — master ( cb2c73...1a2628 )
by Aleh
12s
created

CompleterFactory::getCompleters()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 15
rs 9.2
cc 4
eloc 10
nc 6
nop 2
1
<?php
2
3
namespace Padawan\Domain\Completer;
4
5
use Padawan\Domain\Core\Completion\Context;
6
use Padawan\Domain\Core\Completion\Scope;
7
use Padawan\Domain\Core\Project;
8
use Symfony\Component\EventDispatcher\EventDispatcher;
9
use Padawan\Domain\Event\CustomCompleterEvent;
10
11
class CompleterFactory
12
{
13
    const CUSTOM_COMPLETER = 'completer.custom';
14
15
    public function __construct(
16
        ClassNameCompleter $classNameCompleter,
17
        InterfaceNameCompleter $interfaceNameCompleter,
18
        NamespaceCompleter $namespaceCompleter,
19
        ObjectCompleter $objectCompleter,
20
        StaticCompleter $staticCompleter,
21
        UseCompleter $useCompleter,
22
        VarCompleter $varCompleter,
23
        GlobalFunctionsCompleter $functionsCompleter,
24
        EventDispatcher $dispatcher
25
    ) {
26
        $this->completers = [
27
            $classNameCompleter,
28
            $interfaceNameCompleter,
29
            $namespaceCompleter,
30
            $objectCompleter,
31
            $staticCompleter,
32
            $useCompleter,
33
            $varCompleter,
34
            $functionsCompleter
35
        ];
36
        $this->dispatcher = $dispatcher;
37
    }
38
39
    public function getCompleters(Project $project, Context $context)
40
    {
41
        $completers = [];
42
        foreach($this->completers as $completer) {
43
            if ($completer->canHandle($project, $context)) {
44
                $completers[] = $completer;
45
            }
46
        }
47
        $event = new CustomCompleterEvent($project, $context);
48
        $this->dispatcher->dispatch(self::CUSTOM_COMPLETER, $event);
49
        if ($event->completer instanceof CompleterInterface) {
50
            $completers[] = $event->completer;
51
        }
52
        return $completers;
53
    }
54
55
    private $completers;
56
    private $dispatcher;
57
}
58