Completed
Push — master ( f07a36...bb0ee0 )
by Nico
01:44
created

container.php$0 ➔ expressionFactory()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2
1
<?php declare(strict_types=1);
2
3
/**
4
 * @license     http://opensource.org/licenses/mit-license.php MIT
5
 * @link        https://github.com/nicoSWD
6
 * @author      Nicolas Oelgart <[email protected]>
7
 */
8
namespace nicoSWD\Rule;
9
10
use nicoSWD\Rule\Grammar\JavaScript\JavaScript;
11
use nicoSWD\Rule\TokenStream\AST;
12
use nicoSWD\Rule\Compiler\CompilerFactory;
13
use nicoSWD\Rule\Evaluator\Evaluator;
14
use nicoSWD\Rule\Evaluator\EvaluatorInterface;
15
use nicoSWD\Rule\Expression\ExpressionFactory;
16
use nicoSWD\Rule\Tokenizer\Tokenizer;
17
use nicoSWD\Rule\TokenStream\Token\TokenFactory;
18
use nicoSWD\Rule\TokenStream\TokenStreamFactory;
19
20
return new class {
21
    private static $tokenStreamFactory;
22
    private static $tokenFactory;
23
    private static $compiler;
24
    private static $javaScript;
25
    private static $expressionFactory;
26
    private static $tokenizer;
27
    private static $evaluator;
28
29 220
    public function parser(array $variables): Parser\Parser
30
    {
31 220
        return new Parser\Parser(
32 220
            self::ast($variables),
33 220
            self::expressionFactory(),
34 220
            self::compiler()
35
        );
36
    }
37
38 156
    public function evaluator(): EvaluatorInterface
39
    {
40 156
        if (!isset(self::$evaluator)) {
41 2
            self::$evaluator = new Evaluator();
42
        }
43
44 156
        return self::$evaluator;
45
    }
46
47 220
    private static function tokenFactory(): TokenFactory
48
    {
49 220
        if (!isset(self::$tokenFactory)) {
50 2
            self::$tokenFactory = new TokenFactory();
51
        }
52
53 220
        return self::$tokenFactory;
54
    }
55
56 220
    private static function compiler(): CompilerFactory
57
    {
58 220
        if (!isset(self::$compiler)) {
59 2
            self::$compiler = new CompilerFactory();
60
        }
61
62 220
        return self::$compiler;
63
    }
64
65 220
    private static function ast(array $variables): AST
66
    {
67 220
        $ast = new AST(self::tokenizer(), self::tokenFactory(), self::tokenStreamFactory());
68 220
        $ast->setVariables($variables);
69
70 220
        return $ast;
71
    }
72
73 220
    private static function tokenizer(): Tokenizer
74
    {
75 220
        if (!isset(self::$tokenizer)) {
76 2
            self::$tokenizer = new Tokenizer(self::javascript(), self::tokenFactory());
77
        }
78
79 220
        return self::$tokenizer;
80
    }
81
82 2
    private static function javascript(): JavaScript
83
    {
84 2
        if (!isset(self::$javaScript)) {
85 2
            self::$javaScript = new JavaScript();
86
        }
87
88 2
        return self::$javaScript;
89
    }
90
91 220
    private static function tokenStreamFactory(): TokenStreamFactory
92
    {
93 220
        if (!isset(self::$tokenStreamFactory)) {
94 2
            self::$tokenStreamFactory = new TokenStreamFactory();
95
        }
96
97 220
        return self::$tokenStreamFactory;
98
    }
99
100 220
    private static function expressionFactory(): ExpressionFactory
101
    {
102 220
        if (!isset(self::$expressionFactory)) {
103 2
            self::$expressionFactory = new ExpressionFactory();
104
        }
105
106 220
        return self::$expressionFactory;
107
    }
108
};
109