@@ -10,30 +10,44 @@ namespace Rubberduck.Parsing.VBA
10
10
/// </summary>
11
11
public class CombinedParseTreeListener : IParseTreeListener
12
12
{
13
- private List < IParseTreeListener > _listeners ;
14
- public CombinedParseTreeListener ( IParseTreeListener [ ] listeners )
13
+ private readonly IReadOnlyList < IParseTreeListener > _listeners ;
14
+ public CombinedParseTreeListener ( IEnumerable < IParseTreeListener > listeners )
15
15
{
16
16
_listeners = listeners . ToList ( ) ;
17
17
}
18
18
19
19
public void EnterEveryRule ( ParserRuleContext ctx )
20
20
{
21
- _listeners . ForEach ( l => l . EnterEveryRule ( ctx ) ) ;
21
+ foreach ( var listener in _listeners )
22
+ {
23
+ listener . EnterEveryRule ( ctx ) ;
24
+ ctx . EnterRule ( listener ) ;
25
+ }
22
26
}
23
27
24
28
public void ExitEveryRule ( ParserRuleContext ctx )
25
29
{
26
- _listeners . ForEach ( l => l . ExitEveryRule ( ctx ) ) ;
30
+ foreach ( var listener in _listeners )
31
+ {
32
+ listener . ExitEveryRule ( ctx ) ;
33
+ ctx . ExitRule ( listener ) ;
34
+ }
27
35
}
28
36
29
37
public void VisitErrorNode ( IErrorNode node )
30
38
{
31
- _listeners . ForEach ( l => l . VisitErrorNode ( node ) ) ;
39
+ foreach ( var listener in _listeners )
40
+ {
41
+ listener . VisitErrorNode ( node ) ;
42
+ }
32
43
}
33
44
34
45
public void VisitTerminal ( ITerminalNode node )
35
46
{
36
- _listeners . ForEach ( l => l . VisitTerminal ( node ) ) ;
47
+ foreach ( var listener in _listeners )
48
+ {
49
+ listener . VisitTerminal ( node ) ;
50
+ }
37
51
}
38
52
}
39
53
}
0 commit comments