Skip to content

Commit be13ba7

Browse files
committed
Make the parser stop clearing components for non-parsed projects
1 parent ca87db1 commit be13ba7

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

RetailCoder.VBE/App.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,9 @@ async void sink_ProjectRenamed(object sender, DispatcherRenamedEventArgs<VBProje
339339
}
340340

341341
_logger.Debug("Project '{0}' (ID {1}) was renamed to '{2}'.", e.OldName, e.Item.HelpFile, e.Item.Name);
342-
_parser.State.RemoveProject(e.Item.HelpFile);
342+
343+
// note: if a bug is discovered with renaming a project, it may just need to be removed and readded.
344+
343345
_parser.State.OnParseRequested(sender);
344346
}
345347

Rubberduck.Parsing/VBA/RubberduckParser.cs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,7 @@ namespace Rubberduck.Parsing.VBA
2323
{
2424
public class RubberduckParser : IRubberduckParser, IDisposable
2525
{
26-
public RubberduckParserState State
27-
{
28-
get
29-
{
30-
return _state;
31-
}
32-
}
26+
public RubberduckParserState State { get { return _state; } }
3327

3428
private CancellationTokenSource _central = new CancellationTokenSource();
3529
private CancellationTokenSource _resolverTokenSource; // linked to _central later
@@ -64,11 +58,11 @@ private void StateOnStateChanged(object sender, EventArgs e)
6458
{
6559
Logger.Debug("RubberduckParser handles OnStateChanged ({0})", _state.Status);
6660

67-
if (_state.Status == ParserState.Parsed)
61+
/*if (_state.Status == ParserState.Parsed)
6862
{
6963
Logger.Debug("(handling OnStateChanged) Starting resolver task");
7064
Resolve(_central.Token); // Tests expect this to be synchronous
71-
}
65+
}*/
7266
}
7367

7468
private void ReparseRequested(object sender, ParseRequestEventArgs e)
@@ -81,7 +75,10 @@ private void ReparseRequested(object sender, ParseRequestEventArgs e)
8175
else
8276
{
8377
Cancel(e.Component);
84-
ParseAsync(e.Component, CancellationToken.None);
78+
ParseAsync(e.Component, CancellationToken.None).Wait();
79+
80+
Logger.Trace("Starting resolver task");
81+
Resolve(_central.Token); // Tests expect this to be synchronous
8582
}
8683
}
8784

@@ -137,6 +134,14 @@ private void ParseAll()
137134
var toParse = components.Where(c => _state.IsNewOrModified(c)).ToList();
138135
var unchanged = components.Where(c => !_state.IsNewOrModified(c)).ToList();
139136

137+
File.AppendAllLines("C:/Users/hosch/Desktop/debug.txt", new[]
138+
{
139+
"Projects: " + projects.Count,
140+
"Components: " + components.Count,
141+
"ToParse: " + toParse.Count,
142+
"Unchanged: " + unchanged.Count
143+
});
144+
140145
AddBuiltInDeclarations(projects);
141146

142147
if (!toParse.Any())
@@ -168,10 +173,11 @@ private void ParseAll()
168173
_componentAttributes.Remove(invalidated);
169174
}
170175

171-
foreach (var vbComponent in toParse)
172-
{
173-
ParseAsync(vbComponent, CancellationToken.None);
174-
}
176+
var parseTasks = toParse.Select(vbComponent => ParseAsync(vbComponent, CancellationToken.None)).ToArray();
177+
Task.WaitAll(parseTasks);
178+
179+
Logger.Trace("Starting resolver task");
180+
Resolve(_central.Token); // Tests expect this to be synchronous
175181
}
176182

177183
private void AddBuiltInDeclarations(IReadOnlyList<VBProject> projects)
@@ -479,10 +485,14 @@ private void ResolveInternal(CancellationToken token)
479485
var components = _state.Projects
480486
.Where(project => project.Protection == vbext_ProjectProtection.vbext_pp_none)
481487
.SelectMany(p => p.VBComponents.Cast<VBComponent>()).ToList();
482-
if (!_state.HasAllParseTrees(components))
488+
489+
File.AppendAllLines("C:/Users/hosch/Desktop/debug.txt", new[]
483490
{
484-
return;
485-
}
491+
"Parse tree count: " + _state.ParseTrees.Count()
492+
});
493+
494+
Debug.Assert(_state.HasAllParseTrees(components), string.Format("Expected parse trees: {0}\r\nParse trees: {1}", components.Count, _state.ParseTrees.Count()));
495+
486496
_projectDeclarations.Clear();
487497
_state.ClearBuiltInReferences();
488498
foreach (var kvp in _state.ParseTrees)

Rubberduck.Parsing/VBA/RubberduckParserState.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,7 @@ public void SetModuleState(VBComponent component, ParserState state, SyntaxError
159159
if (AllUserDeclarations.Any())
160160
{
161161
var projectId = component.Collection.Parent.HelpFile;
162-
var project = AllUserDeclarations.SingleOrDefault(item =>
163-
item.DeclarationType == DeclarationType.Project && item.ProjectId == projectId);
162+
var project = _projects.SingleOrDefault(item => item.Value().HelpFile == projectId).Value();
164163

165164
if (project == null)
166165
{

0 commit comments

Comments
 (0)