Completed
Push — develop ( cec1b5...82146f )
by Paul
02:04
created

ContainerFactory   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 10
c 0
b 0
f 0
wmc 1

1 Method

Rating   Name   Duplication   Size   Complexity  
B invoke() 0 24 1
1
<?php
2
3
namespace PhpUnitGen\Container;
4
5
use PhpParser\Parser;
6
use PhpParser\ParserFactory;
7
use PhpUnitGen\Configuration\ConfigurationInterface\ConfigInterface;
8
use PhpUnitGen\Configuration\ConfigurationInterface\ConsoleConfigInterface;
9
use PhpUnitGen\Container\ContainerInterface\ContainerFactoryInterface;
10
use PhpUnitGen\Container\ContainerInterface\ContainerInterface;
11
use PhpUnitGen\Executor\Executor;
12
use PhpUnitGen\Executor\ExecutorInterface\ExecutorInterface;
13
use PhpUnitGen\Parser\NodeParser\AttributeNodeParser;
14
use PhpUnitGen\Parser\NodeParser\ClassNodeParser;
15
use PhpUnitGen\Parser\NodeParser\FunctionNodeParser;
16
use PhpUnitGen\Parser\NodeParser\InterfaceNodeParser;
17
use PhpUnitGen\Parser\NodeParser\NamespaceNodeParser;
18
use PhpUnitGen\Parser\NodeParser\PhpFileNodeParser;
19
use PhpUnitGen\Parser\NodeParser\TraitNodeParser;
20
use PhpUnitGen\Parser\NodeParser\UseNodeParser;
21
use PhpUnitGen\Parser\ParserInterface\PhpParserInterface;
22
use PhpUnitGen\Parser\PhpParser;
23
use PhpUnitGen\Report\Report;
24
use PhpUnitGen\Report\ReportInterface\ReportInterface;
25
26
/**
27
 * Class ContainerFactory.
28
 *
29
 * @author     Paul Thébaud <[email protected]>.
30
 * @copyright  2017-2018 Paul Thébaud <[email protected]>.
31
 * @license    https://opensource.org/licenses/MIT The MIT license.
32
 * @link       https://github.com/paul-thebaud/phpunit-generator
33
 * @since      Class available since Release 2.0.0.
34
 */
35
class ContainerFactory implements ContainerFactoryInterface
36
{
37
    /**
38
     * {@inheritdoc}
39
     */
40
    public function invoke(ConfigInterface $config): ContainerInterface
41
    {
42
        $container = new Container();
43
44
        // Instance dependencies
45
        $container->setInstance(ConfigInterface::class, $config);
46
        $container->setInstance(ConsoleConfigInterface::class, $config);
47
        $container->setInstance(Parser::class, (new ParserFactory())->create(ParserFactory::PREFER_PHP7));
48
49
        // Automatically created dependencies and aliases
50
        $container->set(PhpParserInterface::class, PhpParser::class);
51
        $container->set(ExecutorInterface::class, Executor::class);
52
53
        $container->set(ReportInterface::class, Report::class);
54
        $container->set(UseNodeParser::class);
55
        $container->set(FunctionNodeParser::class);
56
        $container->set(AttributeNodeParser::class);
57
        $container->set(InterfaceNodeParser::class);
58
        $container->set(TraitNodeParser::class);
59
        $container->set(ClassNodeParser::class);
60
        $container->set(NamespaceNodeParser::class);
61
        $container->set(PhpFileNodeParser::class);
62
63
        return $container;
64
    }
65
}
66