Skip to content

Commit 04c5660

Browse files
committed
Code Cleanup, Reset for existing RubberduckParser to the State of next
1 parent 5a058ef commit 04c5660

File tree

4 files changed

+33
-49
lines changed

4 files changed

+33
-49
lines changed

Rubberduck.Parsing/Rubberduck.Parsing.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@
186186
<Compile Include="VBA\AttributesListener.cs" />
187187
<Compile Include="VBA\AttributesParser.cs" />
188188
<Compile Include="VBA\AttributesVisitor.cs" />
189+
<Compile Include="VBA\CombinedParseTreeListener.cs" />
189190
<Compile Include="VBA\ComponentParseTask.cs" />
190191
<Compile Include="VBA\EnumerableExtensions.cs" />
191192
<Compile Include="VBA\IAttributeParser.cs" />

Rubberduck.Parsing/VBA/ComponentParseTask.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,6 @@ public class ParseCompletionArgs
132132
{
133133
public ITokenStream Tokens { get; internal set; }
134134
public IParseTree ParseTree { get; internal set; }
135-
public IEnumerable<CommentNode> Comments { get; internal set; }
136-
public IEnumerable<QualifiedContext> ObsoleteCallContexts { get; internal set; }
137-
public IEnumerable<QualifiedContext> ObsoleteLetContexts { get; internal set; }
138-
public IEnumerable<QualifiedContext> EmptyStringLiterals { get; internal set; }
139-
public IEnumerable<QualifiedContext> ArgListsWithOneByRefParam { get; internal set; }
140-
public IEnumerable<Declaration> Declarations { get; internal set; }
141135
public IDictionary<Tuple<string, DeclarationType>, Attributes> Attributes { get; internal set; }
142136
}
143137

Rubberduck.Parsing/VBA/RubberduckParser.cs

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,6 @@ public class RubberduckParser : IRubberduckParser
2424
{
2525
private readonly ReferencedDeclarationsCollector _comReflector;
2626

27-
private readonly IParseTreeListener[] listeners = new IParseTreeListener[]
28-
{
29-
new ObsoleteCallStatementListener(),
30-
new ObsoleteLetStatementListener(),
31-
new EmptyStringLiteralListener(),
32-
new ArgListWithOneByRefParamListener(),
33-
new CommentListener(),
34-
};
35-
36-
private readonly VBE _vbe;
37-
private readonly RubberduckParserState _state;
38-
private readonly IAttributeParser _attributeParser;
39-
public RubberduckParserState State { get { return _state; } }
40-
4127
public RubberduckParser(VBE vbe, RubberduckParserState state, IAttributeParser attributeParser)
4228
{
4329
_vbe = vbe;
@@ -52,21 +38,17 @@ public RubberduckParser(VBE vbe, RubberduckParserState state, IAttributeParser a
5238

5339
private void ReparseRequested(object sender, EventArgs e)
5440
{
55-
var args = e as ParseRequestEventArgs;
56-
if (args.IsFullReparseRequest)
57-
{
58-
// cancel currently running parsing processes...
59-
Task.Run(() => ParseInternal());
60-
}
61-
else
62-
{
63-
ParseAsync(args.Component, CancellationToken.None, _state.GetRewriter(args.Component));
64-
}
41+
Task.Run(() => ParseInternal());
6542
}
6643

44+
private readonly VBE _vbe;
45+
private readonly RubberduckParserState _state;
46+
private readonly IAttributeParser _attributeParser;
47+
public RubberduckParserState State { get { return _state; } }
48+
6749
/// <summary>
6850
/// This method is not part of the interface and should only be used for testing.
69-
/// Request a reparse using <cref>RubberduckParserState.ParseRequest</cref> instead.
51+
/// Request a reparse using RubberduckParserState.OnParseRequested instead.
7052
/// </summary>
7153
public void Parse()
7254
{
@@ -147,7 +129,8 @@ private void AddDeclarationsFromProjectReferences(IReadOnlyList<VBProject> proje
147129
var references = projects
148130
.SelectMany(project => project.References.Cast<Reference>())
149131
.DistinctBy(reference => reference.Guid)
150-
.Where(reference => reference.Type == vbext_RefKind.vbext_rk_TypeLib);
132+
.Where(reference => reference.Type == vbext_RefKind.vbext_rk_TypeLib)
133+
.ToList();
151134
foreach (var reference in references)
152135
{
153136
AddDeclarationsFromReference(reference);
@@ -171,15 +154,9 @@ private void SetComponentsState(IEnumerable<VBComponent> components, ParserState
171154
}
172155
}
173156

174-
175-
public Task ParseAsync(VBComponent component, CancellationToken token, TokenStreamRewriter rewriter = null)
176-
{
177-
return Task.Run(() => ParseComponent(component, rewriter), token);
178-
}
179-
180-
181157
public void ParseComponent(VBComponent vbComponent, TokenStreamRewriter rewriter = null)
182158
{
159+
var component = vbComponent;
183160
State.SetModuleState(vbComponent, ParserState.Parsing);
184161

185162
try
@@ -195,10 +172,25 @@ public void ParseComponent(VBComponent vbComponent, TokenStreamRewriter rewriter
195172
}
196173
catch (VBAPreprocessorException)
197174
{
198-
Debug.Print("Falling back to no preprocessing");
175+
// Fall back to not doing any preprocessing at all.
199176
preprocessedModuleBody = code;
200177
}
201178

179+
var obsoleteCallsListener = new ObsoleteCallStatementListener();
180+
var obsoleteLetListener = new ObsoleteLetStatementListener();
181+
var emptyStringLiteralListener = new EmptyStringLiteralListener();
182+
var argListsWithOneByRefParam = new ArgListWithOneByRefParamListener();
183+
var commentListener = new CommentListener();
184+
185+
var listeners = new IParseTreeListener[]
186+
{
187+
obsoleteCallsListener,
188+
obsoleteLetListener,
189+
emptyStringLiteralListener,
190+
argListsWithOneByRefParam,
191+
commentListener
192+
};
193+
202194
DeclarationSymbolsListener listener;
203195
var tree = GetParseTree(vbComponent, listeners, preprocessedModuleBody, qualifiedName, out listener);
204196
WalkParseTree(listeners, qualifiedName, tree, listener);
@@ -207,13 +199,13 @@ public void ParseComponent(VBComponent vbComponent, TokenStreamRewriter rewriter
207199
}
208200
catch (COMException exception)
209201
{
210-
State.SetModuleState(vbComponent, ParserState.Error);
202+
State.SetModuleState(component, ParserState.Error);
211203
Debug.WriteLine("Exception thrown in thread {0}:\n{1}", Thread.CurrentThread.ManagedThreadId, exception);
212204
}
213205
catch (SyntaxErrorException exception)
214206
{
215207
Debug.WriteLine("Exception thrown in thread {0}:\n{1}", Thread.CurrentThread.ManagedThreadId, exception);
216-
State.SetModuleState(vbComponent, ParserState.Error, exception);
208+
State.SetModuleState(component, ParserState.Error, exception);
217209
}
218210
catch (OperationCanceledException exception)
219211
{
@@ -369,17 +361,17 @@ private ParserState WalkParseTree(VBComponent component, IParseTree tree, Declar
369361
return ParserState.Ready;
370362
}
371363

372-
public void Resolve(CancellationToken token)
364+
public Task ParseAsync(VBComponent component, CancellationToken token, TokenStreamRewriter rewriter = null)
373365
{
374366
throw new NotImplementedException();
375367
}
376368

377-
public Task ParseAsync(VBComponent component, TokenStreamRewriter rewriter = null)
369+
public void Cancel(VBComponent component = null)
378370
{
379371
throw new NotImplementedException();
380372
}
381373

382-
public void Cancel(VBComponent component = null)
374+
public void Resolve(CancellationToken token)
383375
{
384376
throw new NotImplementedException();
385377
}

Rubberduck.Parsing/VBA/RubberduckParserState.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,7 @@ private ParserState EvaluateParserState()
115115

116116
public ParserState GetModuleState(VBComponent component)
117117
{
118-
ParserState result;
119-
return _moduleStates.TryGetValue(component, out result)
120-
? result
121-
: ParserState.Pending;
118+
return _moduleStates.GetOrAdd(component, ParserState.Pending);
122119
}
123120

124121
private ParserState _status;

0 commit comments

Comments
 (0)