Skip to content

Commit 5a8619a

Browse files
committed
More teardown.
1 parent 6159f58 commit 5a8619a

File tree

6 files changed

+71
-9
lines changed

6 files changed

+71
-9
lines changed

RetailCoder.VBE/App.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,8 @@ public void Dispose()
402402
item.Value.Item1.Unadvise(item.Value.Item2);
403403
}
404404
_hooks.Dispose();
405+
406+
_stateBar.Dispose();
405407
}
406408
}
407409
}

RetailCoder.VBE/AppMenu.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
using System;
12
using System.Collections.Generic;
23
using Rubberduck.Parsing.VBA;
34
using Rubberduck.UI.Command.MenuItems;
45
using Rubberduck.UI.Command.MenuItems.ParentMenus;
56

67
namespace Rubberduck
78
{
8-
public class AppMenu : IAppMenu
9+
public class AppMenu : IAppMenu, IDisposable
910
{
1011
private readonly IEnumerable<IParentMenuItem> _menus;
1112

@@ -37,5 +38,16 @@ public void Localize()
3738
menu.Localize();
3839
}
3940
}
41+
42+
public void Dispose()
43+
{
44+
foreach (var menu in _menus)
45+
{
46+
if (menu.Item != null)
47+
{
48+
menu.Item.Delete();
49+
}
50+
}
51+
}
4052
}
4153
}

RetailCoder.VBE/Root/RubberduckModule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public override void Load()
6464
_kernel.Bind<GitProvider>().ToSelf().InSingletonScope();
6565
_kernel.Bind<NewUnitTestModuleCommand>().ToSelf().InSingletonScope();
6666
_kernel.Bind<NewTestMethodCommand>().ToSelf().InSingletonScope();
67+
_kernel.Bind<RubberduckCommandBar>().ToSelf().InSingletonScope();
6768

6869
BindCodeInspectionTypes();
6970

RetailCoder.VBE/UI/Command/MenuItems/ParentMenus/ParentMenuItemBase.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,14 @@ public void Dispose()
195195
{
196196
foreach (var item in _items)
197197
{
198-
item.Value.Delete();
198+
try
199+
{
200+
item.Value.Delete();
201+
}
202+
catch (COMException)
203+
{
204+
// gulp
205+
}
199206
}
200207

201208
Item.Delete();

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

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace Rubberduck.UI.Command.MenuItems
1313
{
14-
public class RubberduckCommandBar
14+
public class RubberduckCommandBar : IDisposable
1515
{
1616
private readonly RubberduckParserState _state;
1717
private readonly VBE _vbe;
@@ -20,6 +20,7 @@ public class RubberduckCommandBar
2020
private CommandBarButton _refreshButton;
2121
private CommandBarButton _statusButton;
2222
private CommandBarButton _selectionButton;
23+
private CommandBar _commandbar;
2324

2425
public RubberduckCommandBar(RubberduckParserState state, VBE vbe, IShowParserErrorsCommand command)
2526
{
@@ -105,31 +106,47 @@ private void OnRefresh()
105106

106107
public void Initialize()
107108
{
108-
var commandbar = _vbe.CommandBars.Add("Rubberduck", MsoBarPosition.msoBarTop, false, true);
109+
_commandbar = _vbe.CommandBars.Add("Rubberduck", MsoBarPosition.msoBarTop, false, true);
109110

110-
_refreshButton = (CommandBarButton)commandbar.Controls.Add(MsoControlType.msoControlButton);
111+
_refreshButton = (CommandBarButton)_commandbar.Controls.Add(MsoControlType.msoControlButton);
111112
ParentMenuItemBase.SetButtonImage(_refreshButton, Resources.arrow_circle_double, Resources.arrow_circle_double_mask);
112113
_refreshButton.Style = MsoButtonStyle.msoButtonIcon;
113114
_refreshButton.Tag = "Refresh";
114115
_refreshButton.TooltipText =RubberduckUI.RubberduckCommandbarRefreshButtonTooltip;
115116
_refreshButton.Click += refreshButton_Click;
116117

117-
_statusButton = (CommandBarButton)commandbar.Controls.Add(MsoControlType.msoControlButton);
118+
_statusButton = (CommandBarButton)_commandbar.Controls.Add(MsoControlType.msoControlButton);
118119
_statusButton.Style = MsoButtonStyle.msoButtonCaption;
119120
_statusButton.Tag = "Status";
120121
_statusButton.Click += _statusButton_Click;
121122

122-
_selectionButton = (CommandBarButton)commandbar.Controls.Add(MsoControlType.msoControlButton);
123+
_selectionButton = (CommandBarButton)_commandbar.Controls.Add(MsoControlType.msoControlButton);
123124
_selectionButton.Style = MsoButtonStyle.msoButtonCaption;
124125
_selectionButton.BeginGroup = true;
125126
_selectionButton.Enabled = false;
126127

127-
commandbar.Visible = true;
128+
_commandbar.Visible = true;
128129
}
129130

130131
private void refreshButton_Click(CommandBarButton Ctrl, ref bool CancelDefault)
131132
{
132133
OnRefresh();
133134
}
135+
136+
private bool _isDisposed;
137+
public void Dispose()
138+
{
139+
if (_isDisposed)
140+
{
141+
return;
142+
}
143+
144+
_refreshButton.Delete();
145+
_selectionButton.Delete();
146+
_statusButton.Delete();
147+
_commandbar.Delete();
148+
149+
_isDisposed = true;
150+
}
134151
}
135152
}

Rubberduck.Parsing/VBA/RubberduckParserState.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public RubberduckStatusMessageEventArgs(string message)
5252
public string Message { get { return _message; } }
5353
}
5454

55-
public sealed class RubberduckParserState
55+
public sealed class RubberduckParserState : IDisposable
5656
{
5757
// circumvents VBIDE API's tendency to return a new instance at every parse, which breaks reference equality checks everywhere
5858
private readonly IDictionary<string, Func<VBProject>> _projects = new Dictionary<string, Func<VBProject>>();
@@ -727,5 +727,28 @@ public void RemoveBuiltInDeclarations(Reference reference)
727727
Debug.WriteLine("Could not remove declarations for removed reference '{0}' ({1}).", reference.Name, QualifiedModuleName.GetProjectId(reference));
728728
}
729729
}
730+
731+
private bool _isDisposed;
732+
public void Dispose()
733+
{
734+
if (_isDisposed)
735+
{
736+
return;
737+
}
738+
739+
_declarations.Clear();
740+
_tokenStreams.Clear();
741+
_parseTrees.Clear();
742+
_moduleStates.Clear();
743+
_moduleContentHashCodes.Clear();
744+
_comments.Clear();
745+
_annotations.Clear();
746+
_moduleExceptions.Clear();
747+
_moduleAttributes.Clear();
748+
_declarationSelections.Clear();
749+
_projects.Clear();
750+
751+
_isDisposed = true;
752+
}
730753
}
731754
}

0 commit comments

Comments
 (0)