4
4
5
5
namespace Coduo \PHPMatcher \Factory ;
6
6
7
+ use Coduo \PHPMatcher \Backtrace ;
7
8
use Coduo \PHPMatcher \Factory ;
8
9
use Coduo \PHPMatcher \Lexer ;
9
10
use Coduo \PHPMatcher \Matcher ;
10
11
use Coduo \PHPMatcher \Parser ;
11
12
12
13
final class MatcherFactory implements Factory
13
14
{
14
- public function createMatcher () : Matcher
15
+ public function createMatcher (Backtrace $ backtrace = null ) : Matcher
15
16
{
16
- return new Matcher ($ this ->buildMatchers ($ this ->buildParser ()));
17
+ $ matcherBacktrace = $ backtrace ? $ backtrace : new Backtrace ();
18
+
19
+ return new Matcher ($ this ->buildMatchers ($ this ->buildParser (), $ matcherBacktrace ), $ matcherBacktrace );
17
20
}
18
21
19
- protected function buildMatchers (Parser $ parser ) : Matcher \ChainMatcher
22
+ protected function buildMatchers (Parser $ parser, Backtrace $ backtrace ) : Matcher \ChainMatcher
20
23
{
21
- $ scalarMatchers = $ this ->buildScalarMatchers ($ parser );
22
- $ arrayMatcher = $ this ->buildArrayMatcher ($ scalarMatchers , $ parser );
24
+ $ scalarMatchers = $ this ->buildScalarMatchers ($ parser, $ backtrace );
25
+ $ arrayMatcher = $ this ->buildArrayMatcher ($ scalarMatchers , $ parser, $ backtrace );
23
26
24
27
// Matchers are registered in order of matching
25
28
// 1) all scalars
@@ -28,48 +31,61 @@ protected function buildMatchers(Parser $parser) : Matcher\ChainMatcher
28
31
// 4) or "||"
29
32
// 5) full text
30
33
31
- $ chainMatcher = new Matcher \ChainMatcher ([
32
- $ scalarMatchers ,
33
- new Matcher \JsonMatcher ($ arrayMatcher ),
34
- new Matcher \XmlMatcher ($ arrayMatcher ),
35
- $ arrayMatcher ,
36
- new Matcher \OrMatcher ($ scalarMatchers ),
37
- new Matcher \TextMatcher ($ scalarMatchers , $ parser ),
38
- ]);
34
+ $ chainMatcher = new Matcher \ChainMatcher (
35
+ 'all ' ,
36
+ $ backtrace ,
37
+ [
38
+ $ scalarMatchers ,
39
+ new Matcher \JsonMatcher ($ arrayMatcher , $ backtrace ),
40
+ new Matcher \XmlMatcher ($ arrayMatcher , $ backtrace ),
41
+ $ arrayMatcher ,
42
+ new Matcher \OrMatcher ($ backtrace , $ scalarMatchers ),
43
+ new Matcher \TextMatcher ($ scalarMatchers , $ backtrace , $ parser ),
44
+ ]
45
+ );
39
46
40
47
return $ chainMatcher ;
41
48
}
42
49
43
- protected function buildArrayMatcher (Matcher \ChainMatcher $ scalarMatchers , Parser $ parser ) : Matcher \ArrayMatcher
50
+ protected function buildArrayMatcher (Matcher \ChainMatcher $ scalarMatchers , Parser $ parser, Backtrace $ backtrace ) : Matcher \ArrayMatcher
44
51
{
45
- $ orMatcher = new Matcher \OrMatcher ($ scalarMatchers );
52
+ $ orMatcher = new Matcher \OrMatcher ($ backtrace , $ scalarMatchers );
46
53
47
54
return new Matcher \ArrayMatcher (
48
- new Matcher \ChainMatcher ([
49
- $ orMatcher ,
50
- $ scalarMatchers ,
51
- new Matcher \TextMatcher ($ scalarMatchers , $ parser )
52
- ]),
55
+ new Matcher \ChainMatcher (
56
+ 'array ' ,
57
+ $ backtrace ,
58
+ [
59
+ $ orMatcher ,
60
+ $ scalarMatchers ,
61
+ new Matcher \TextMatcher ($ scalarMatchers , $ backtrace , $ parser )
62
+ ]
63
+ ),
64
+ $ backtrace ,
53
65
$ parser
54
66
);
55
67
}
56
68
57
- protected function buildScalarMatchers (Parser $ parser ) : Matcher \ChainMatcher
69
+ protected function buildScalarMatchers (Parser $ parser, Backtrace $ backtrace ) : Matcher \ChainMatcher
58
70
{
59
- return new Matcher \ChainMatcher ([
60
- new Matcher \CallbackMatcher (),
61
- new Matcher \ExpressionMatcher (),
62
- new Matcher \NullMatcher (),
63
- new Matcher \StringMatcher ($ parser ),
64
- new Matcher \IntegerMatcher ($ parser ),
65
- new Matcher \BooleanMatcher ($ parser ),
66
- new Matcher \DoubleMatcher ($ parser ),
67
- new Matcher \NumberMatcher ($ parser ),
68
- new Matcher \ScalarMatcher (),
69
- new Matcher \WildcardMatcher (),
70
- new Matcher \UuidMatcher ($ parser ),
71
- new Matcher \JsonObjectMatcher ($ parser )
72
- ]);
71
+ return new Matcher \ChainMatcher (
72
+ 'scalars ' ,
73
+ $ backtrace ,
74
+ [
75
+ new Matcher \CallbackMatcher ($ backtrace ),
76
+ new Matcher \ExpressionMatcher ($ backtrace ),
77
+ new Matcher \NullMatcher ($ backtrace ),
78
+ new Matcher \StringMatcher ($ backtrace , $ parser ),
79
+ new Matcher \IntegerMatcher ($ backtrace , $ parser ),
80
+ new Matcher \BooleanMatcher ($ backtrace , $ parser ),
81
+ new Matcher \DoubleMatcher ($ backtrace , $ parser ),
82
+ new Matcher \NumberMatcher ($ backtrace , $ parser ),
83
+ new Matcher \ScalarMatcher ($ backtrace ),
84
+ new Matcher \WildcardMatcher ($ backtrace ),
85
+ new Matcher \UuidMatcher ($ backtrace , $ parser ),
86
+ new Matcher \JsonObjectMatcher ($ backtrace , $ parser )
87
+ ]
88
+ );
73
89
}
74
90
75
91
protected function buildParser () : Parser
0 commit comments