Skip to content

Commit 2e77382

Browse files
authored
Merge pull request #1760 from Hosch250/ParserIssues
Parser issues
2 parents 2c4db60 + e94e8f1 commit 2e77382

File tree

5 files changed

+36
-27
lines changed

5 files changed

+36
-27
lines changed

RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public CodeExplorerViewModel(FolderHelper folderHelper, RubberduckParserState st
2828
_folderHelper = folderHelper;
2929
_state = state;
3030
_state.StateChanged += ParserState_StateChanged;
31-
31+
3232
_refreshCommand = new DelegateCommand(param => _state.OnParseRequested(this),
3333
param => !IsBusy && _state.IsDirty());
3434

@@ -188,38 +188,38 @@ public string PanelTitle
188188

189189
if (SelectedItem is CodeExplorerProjectViewModel)
190190
{
191-
var node = (CodeExplorerProjectViewModel) SelectedItem;
191+
var node = (CodeExplorerProjectViewModel)SelectedItem;
192192
return node.Declaration.IdentifierName + string.Format(" - ({0})", node.Declaration.DeclarationType);
193193
}
194194

195195
if (SelectedItem is CodeExplorerComponentViewModel)
196196
{
197-
var node = (CodeExplorerComponentViewModel) SelectedItem;
197+
var node = (CodeExplorerComponentViewModel)SelectedItem;
198198
return node.Declaration.IdentifierName + string.Format(" - ({0})", node.Declaration.DeclarationType);
199199
}
200200

201201
if (SelectedItem is CodeExplorerMemberViewModel)
202202
{
203-
var node = (CodeExplorerMemberViewModel) SelectedItem;
203+
var node = (CodeExplorerMemberViewModel)SelectedItem;
204204
return node.Declaration.IdentifierName + string.Format(" - ({0})", node.Declaration.DeclarationType);
205205
}
206206

207207
return SelectedItem.Name;
208208
}
209209
}
210-
210+
211211
public string Description
212212
{
213213
get
214214
{
215215
if (SelectedItem is ICodeExplorerDeclarationViewModel)
216216
{
217-
return ((ICodeExplorerDeclarationViewModel) SelectedItem).Declaration.DescriptionString;
217+
return ((ICodeExplorerDeclarationViewModel)SelectedItem).Declaration.DescriptionString;
218218
}
219219

220220
if (SelectedItem is CodeExplorerCustomFolderViewModel)
221221
{
222-
return ((CodeExplorerCustomFolderViewModel) SelectedItem).FolderAttribute;
222+
return ((CodeExplorerCustomFolderViewModel)SelectedItem).FolderAttribute;
223223
}
224224

225225
return string.Empty;
@@ -237,7 +237,7 @@ public ObservableCollection<CodeExplorerItemViewModel> Projects
237237
set
238238
{
239239
_projects = new ObservableCollection<CodeExplorerItemViewModel>(value.OrderBy(o => o.NameWithSignature));
240-
240+
241241
ReorderChildNodes(_projects);
242242
OnPropertyChanged();
243243
}
@@ -250,12 +250,12 @@ private void ParserState_StateChanged(object sender, EventArgs e)
250250
Projects = new ObservableCollection<CodeExplorerItemViewModel>();
251251
}
252252

253-
IsBusy = _state.Status == ParserState.Parsing;
254-
if (_state.Status != ParserState.Ready)
253+
IsBusy = _state.Status < ParserState.ResolvedDeclarations;
254+
if (_state.Status != ParserState.ResolvedDeclarations)
255255
{
256256
return;
257257
}
258-
258+
259259
var userDeclarations = _state.AllUserDeclarations
260260
.GroupBy(declaration => declaration.Project)
261261
.Where(grouping => grouping.Key != null)
@@ -273,7 +273,7 @@ private void ParserState_StateChanged(object sender, EventArgs e)
273273
grouping)).ToList();
274274

275275
UpdateNodes(Projects, newProjects);
276-
276+
277277
Projects = new ObservableCollection<CodeExplorerItemViewModel>(newProjects);
278278
}
279279

@@ -403,7 +403,7 @@ private void SetErrorState(CodeExplorerItemViewModel itemNode, VBComponent compo
403403

404404
if (node is CodeExplorerComponentViewModel)
405405
{
406-
var componentNode = (CodeExplorerComponentViewModel) node;
406+
var componentNode = (CodeExplorerComponentViewModel)node;
407407
if (componentNode.GetSelectedDeclaration().QualifiedName.QualifiedModuleName.Component == component)
408408
{
409409
componentNode.IsErrorState = true;
@@ -472,8 +472,8 @@ private void SetErrorState(CodeExplorerItemViewModel itemNode, VBComponent compo
472472
// this is a special case--we have to reset SelectedItem to prevent a crash
473473
private void ExecuteRemoveComand(object param)
474474
{
475-
var node = (CodeExplorerComponentViewModel) SelectedItem;
476-
SelectedItem = Projects.First(p => ((CodeExplorerProjectViewModel) p).Declaration.Project == node.Declaration.Project);
475+
var node = (CodeExplorerComponentViewModel)SelectedItem;
476+
SelectedItem = Projects.First(p => ((CodeExplorerProjectViewModel)p).Declaration.Project == node.Declaration.Project);
477477

478478
_externalRemoveCommand.Execute(param);
479479
}

RetailCoder.VBE/UI/Command/MenuItems/RubberduckCommandBar.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ private void SetSelectionText(QualifiedSelection selection)
9494
private void State_StateChanged(object sender, EventArgs e)
9595
{
9696
_logger.Debug("RubberduckCommandBar handles StateChanged...");
97-
SetStatusText(RubberduckUI.ResourceManager.GetString("ParserState_" + _state.Status));
97+
98+
if (_state.Status != ParserState.ResolvedDeclarations)
99+
{
100+
SetStatusText(RubberduckUI.ResourceManager.GetString("ParserState_" + _state.Status));
101+
}
98102
}
99103

100104
public event EventHandler Refresh;

RetailCoder.VBE/UI/UnitTesting/TestExplorerModel.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,17 @@ public TestExplorerModel(VBE vbe, RubberduckParserState state)
2626

2727
private void State_StateChanged(object sender, ParserStateEventArgs e)
2828
{
29-
if (e.State != ParserState.Ready) { return; }
30-
31-
var tests = UnitTestHelpers.GetAllTests(_vbe, _state).ToList();
32-
33-
var removedTests = Tests.Where(test =>
34-
!tests.Any(t =>
35-
t.Declaration.ComponentName == test.Declaration.ComponentName &&
36-
t.Declaration.IdentifierName == test.Declaration.IdentifierName &&
37-
t.Declaration.ProjectId == test.Declaration.ProjectId)).ToList();
29+
if (e.State != ParserState.ResolvedDeclarations) { return; }
3830

3931
_dispatcher.Invoke(() =>
4032
{
33+
var tests = UnitTestHelpers.GetAllTests(_vbe, _state).ToList();
34+
35+
var removedTests = Tests.Where(test =>
36+
!tests.Any(t =>
37+
t.Declaration.ComponentName == test.Declaration.ComponentName &&
38+
t.Declaration.IdentifierName == test.Declaration.IdentifierName &&
39+
t.Declaration.ProjectId == test.Declaration.ProjectId)).ToList();
4140

4241
// remove old tests
4342
foreach (var test in removedTests)

Rubberduck.Parsing/VBA/ParserState.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ public enum ParserState
2424
/// </summary>
2525
Resolving,
2626
/// <summary>
27+
/// Resolving identifier references.
28+
/// </summary>
29+
ResolvedDeclarations,
30+
/// <summary>
2731
/// Parser state is in sync with the actual code in the VBE.
2832
/// </summary>
2933
Ready,

Rubberduck.Parsing/VBA/RubberduckParser.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ private void ParseAll()
143143

144144
if (!toParse.Any())
145145
{
146-
State.SetStatusAndFireStateChanged(ParserState.Ready);
146+
State.SetStatusAndFireStateChanged(_state.Status);
147147
return;
148148
}
149149

150-
150+
151151
lock (_state) // note, method is invoked from UI thread... really need the lock here?
152152
{
153153
foreach (var component in toParse)
@@ -496,6 +496,8 @@ private void ResolveInternal(CancellationToken token)
496496
ResolveDeclarations(qualifiedName.Component, kvp.Value);
497497
}
498498

499+
_state.SetStatusAndFireStateChanged(ParserState.ResolvedDeclarations);
500+
499501
// walk all parse trees (modified or not) for identifier references
500502
var finder = new DeclarationFinder(_state.AllDeclarations, _state.AllComments, _state.AllAnnotations);
501503
var passes = new List<ICompilationPass>

0 commit comments

Comments
 (0)