Completed
Branch master (8a10e7)
by Nico
08:15 queued 05:53
created

container.php$0 ➔ tokenFactory()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
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
use nicoSWD\Rule\TokenStream\CallableUserMethodFactory;
20
21
return new class {
22
    /** @var TokenStreamFactory */
23
    private static $tokenStreamFactory;
24
    /** @var TokenFactory */
25
    private static $tokenFactory;
26
    /** @var CompilerFactory */
27
    private static $compiler;
28
    /** @var JavaScript */
29
    private static $javaScript;
30
    /** @var ExpressionFactory */
31
    private static $expressionFactory;
32
    /** @var CallableUserMethodFactory */
33
    private static $userMethodFactory;
34
    /** @var Tokenizer */
35
    private static $tokenizer;
36
    /** @var Evaluator */
37
    private static $evaluator;
38
39 228
    public function parser(array $variables): Parser\Parser
40
    {
41 228
        return new Parser\Parser(
42 228
            self::ast($variables),
43 114
            self::expressionFactory(),
44 228
            self::compiler()
45
        );
46
    }
47
48 162
    public function evaluator(): EvaluatorInterface
49
    {
50 162
        if (!isset(self::$evaluator)) {
51 2
            self::$evaluator = new Evaluator();
52
        }
53
54 162
        return self::$evaluator;
55
    }
56
57 228
    private static function tokenFactory(): TokenFactory
58
    {
59 228
        if (!isset(self::$tokenFactory)) {
60 2
            self::$tokenFactory = new TokenFactory();
61
        }
62
63 228
        return self::$tokenFactory;
64
    }
65
66 228
    private static function compiler(): CompilerFactory
67
    {
68 228
        if (!isset(self::$compiler)) {
69 2
            self::$compiler = new CompilerFactory();
70
        }
71
72 228
        return self::$compiler;
73
    }
74
75 228
    private static function ast(array $variables): AST
76
    {
77 228
        $ast = new AST(self::tokenizer(), self::tokenFactory(), self::tokenStreamFactory(), self::userMethodFactory());
78 228
        $ast->setVariables($variables);
79
80 228
        return $ast;
81
    }
82
83 228
    private static function tokenizer(): Tokenizer
84
    {
85 228
        if (!isset(self::$tokenizer)) {
86 2
            self::$tokenizer = new Tokenizer(self::javascript(), self::tokenFactory());
87
        }
88
89 228
        return self::$tokenizer;
90
    }
91
92 2
    private static function javascript(): JavaScript
93
    {
94 2
        if (!isset(self::$javaScript)) {
95 2
            self::$javaScript = new JavaScript();
96
        }
97
98 2
        return self::$javaScript;
99
    }
100
101 228
    private static function tokenStreamFactory(): TokenStreamFactory
102
    {
103 228
        if (!isset(self::$tokenStreamFactory)) {
104 2
            self::$tokenStreamFactory = new TokenStreamFactory();
105
        }
106
107 228
        return self::$tokenStreamFactory;
108
    }
109
110 228
    private static function expressionFactory(): ExpressionFactory
111
    {
112 228
        if (!isset(self::$expressionFactory)) {
113 2
            self::$expressionFactory = new ExpressionFactory();
114
        }
115
116 228
        return self::$expressionFactory;
117
    }
118
119 228
    private static function userMethodFactory(): CallableUserMethodFactory
120
    {
121 228
        if (!isset(self::$userMethodFactory)) {
122 2
            self::$userMethodFactory = new CallableUserMethodFactory();
123
        }
124
125 228
        return self::$userMethodFactory;
126
    }
127
};
128