Skip to content

Commit d4b45fa

Browse files
committed
Use QMN for ComponentEventArgs instead of passing SCWs across events
1 parent 70bf1cc commit d4b45fa

File tree

5 files changed

+93
-80
lines changed

5 files changed

+93
-80
lines changed

Rubberduck.Parsing/VBA/RubberduckParserState.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ private void Sinks_ComponentAdded(object sender, ComponentEventArgs e)
274274
return;
275275
}
276276

277-
Logger.Debug("Component '{0}' was added.", e.Component.Name);
277+
Logger.Debug("Component '{0}' was added.", e.QualifiedModuleName.ComponentName);
278278
OnParseRequested(sender);
279279
}
280280

@@ -285,7 +285,7 @@ private void Sinks_ComponentRemoved(object sender, ComponentEventArgs e)
285285
return;
286286
}
287287

288-
Logger.Debug("Component '{0}' was removed.", e.Component.Name);
288+
Logger.Debug("Component '{0}' was removed.", e.QualifiedModuleName.ComponentName);
289289
OnParseRequested(sender);
290290
}
291291

@@ -296,15 +296,14 @@ private void Sinks_ComponentRenamed(object sender, ComponentRenamedEventArgs e)
296296
return;
297297
}
298298

299-
Logger.Debug("Component '{0}' was renamed to '{1}'.", e.OldName, e.Component.Name);
299+
Logger.Debug("Component '{0}' was renamed to '{1}'.", e.OldName, e.QualifiedModuleName.ComponentName);
300300

301301
//todo: Find out for which situation this drastic (and problematic) cache invalidation has been introduced.
302302
if (ComponentIsWorksheet(e))
303303
{
304304
RefreshProject(e.ProjectId);
305-
Logger.Debug("Project '{0}' was removed.", e.Component.Name);
305+
Logger.Debug("Project '{0}' was removed.", e.QualifiedModuleName.ComponentName);
306306
}
307-
308307
OnParseRequested(sender);
309308
}
310309

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,47 @@
11
using System;
2+
using Rubberduck.VBEditor.ComManagement;
23
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
34

45
namespace Rubberduck.VBEditor.Events
56
{
67
public class ComponentEventArgs : EventArgs
78
{
8-
public ComponentEventArgs(string projectId, IVBProject project, IVBComponent component)
9+
private readonly QualifiedModuleName _qmn;
10+
11+
public ComponentEventArgs(QualifiedModuleName qmn)
912
{
10-
ProjectId = projectId;
11-
Project = project;
12-
Component = component;
13+
_qmn = qmn;
1314
}
1415

15-
public string ProjectId { get; }
16+
public string ProjectId => _qmn.ProjectId;
17+
public QualifiedModuleName QualifiedModuleName => _qmn;
1618

17-
public IVBProject Project { get; }
19+
public bool TryGetProject(IProjectsRepository repository, out IVBProject project)
20+
{
21+
try
22+
{
23+
project = repository.Project(_qmn.ProjectId);
24+
return true;
25+
}
26+
catch
27+
{
28+
project = null;
29+
return false;
30+
}
31+
}
1832

19-
public IVBComponent Component { get; }
33+
public bool TryGetComponent(IProjectsRepository repository, out IVBComponent component)
34+
{
35+
try
36+
{
37+
component = repository.Component(_qmn);
38+
return true;
39+
}
40+
catch
41+
{
42+
component = null;
43+
return false;
44+
}
45+
}
2046
}
2147
}

Rubberduck.VBEEditor/Events/ComponentRenamedEventArgs.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Rubberduck.VBEditor.Events
44
{
55
public class ComponentRenamedEventArgs : ComponentEventArgs
66
{
7-
public ComponentRenamedEventArgs(string projectId, IVBProject project, IVBComponent component, string oldName)
8-
: base(projectId, project, component)
7+
public ComponentRenamedEventArgs(QualifiedModuleName qmn, string oldName)
8+
: base(qmn)
99
{
1010
OldName = oldName;
1111
}

Rubberduck.VBEditor.VB6/SafeComWrappers/VB/VBComponents.cs

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,18 @@ void VB._dispVBComponentsEvents.ItemRemoved(VB.VBComponent VBComponent)
116116
public event EventHandler<ComponentRenamedEventArgs> ComponentRenamed;
117117
void VB._dispVBComponentsEvents.ItemRenamed(VB.VBComponent VBComponent, string OldName)
118118
{
119-
var component = new VBComponent(VBComponent);
120-
var handler = ComponentRenamed;
121-
if (handler == null)
119+
using (var component = new VBComponent(VBComponent))
122120
{
123-
component.Dispose();
124-
return;
121+
var handler = ComponentRenamed;
122+
if (handler == null)
123+
{
124+
return;
125+
}
126+
127+
var qmn = new QualifiedModuleName(component);
128+
handler.Invoke(component,
129+
new ComponentRenamedEventArgs(qmn, OldName));
125130
}
126-
127-
IVBProject project;
128-
using (var components = component.Collection)
129-
{
130-
project = components.Parent;
131-
}
132-
handler.Invoke(component, new ComponentRenamedEventArgs(project.ProjectId, project, component, OldName));
133131
}
134132

135133
public event EventHandler<ComponentEventArgs> ComponentSelected;
@@ -152,23 +150,19 @@ void VB._dispVBComponentsEvents.ItemReloaded(VB.VBComponent VBComponent)
152150

153151
private static void OnDispatch(EventHandler<ComponentEventArgs> dispatched, VB.VBComponent vbComponent)
154152
{
155-
var component = new VBComponent(vbComponent);
156-
var handler = dispatched;
157-
if (handler == null)
158-
{
159-
component.Dispose();
160-
return;
161-
}
162-
163-
IVBProject project;
164-
using (var components = component.Collection)
153+
using (var component = new VBComponent(vbComponent))
165154
{
166-
project = components.Parent;
155+
var handler = dispatched;
156+
if (handler == null)
157+
{
158+
component.Dispose();
159+
return;
160+
}
161+
162+
var qmn = new QualifiedModuleName(component);
163+
var eventArgs = new ComponentEventArgs(qmn);
164+
handler.Invoke(component, eventArgs);
167165
}
168-
169-
170-
var eventArgs = new ComponentEventArgs(project.ProjectId, project, component);
171-
handler.Invoke(component, eventArgs);
172166
}
173167

174168
#endregion

Rubberduck.VBEditor.VBA/SafeComWrappers/VB/VBComponents.cs

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -195,29 +195,26 @@ void VB._dispVBComponentsEvents.ItemRemoved(VB.VBComponent VBComponent)
195195
public event EventHandler<ComponentRenamedEventArgs> ComponentRenamed;
196196
void VB._dispVBComponentsEvents.ItemRenamed(VB.VBComponent VBComponent, string OldName)
197197
{
198-
var component = new VBComponent(VBComponent);
199-
var handler = ComponentRenamed;
200-
if (handler == null)
198+
using (var component = new VBComponent(VBComponent))
201199
{
202-
component.Dispose();
203-
return;
204-
}
205-
206-
IVBProject project;
207-
using (var components = component.Collection)
208-
{
209-
project = components.Parent;
210-
}
200+
var handler = ComponentRenamed;
201+
if (handler == null)
202+
{
203+
return;
204+
}
211205

206+
using (var components = component.Collection)
207+
using (var project = components.Parent)
208+
{
209+
if (project.Protection == ProjectProtection.Locked)
210+
{
211+
return;
212+
}
213+
}
212214

213-
if (project.Protection == ProjectProtection.Locked)
214-
{
215-
project.Dispose();
216-
component.Dispose();
217-
return;
215+
var qmn = new QualifiedModuleName(component);
216+
handler.Invoke(component, new ComponentRenamedEventArgs(qmn, OldName));
218217
}
219-
220-
handler.Invoke(component, new ComponentRenamedEventArgs(project.ProjectId, project, component, OldName));
221218
}
222219

223220
public event EventHandler<ComponentEventArgs> ComponentSelected;
@@ -240,30 +237,27 @@ void VB._dispVBComponentsEvents.ItemReloaded(VB.VBComponent VBComponent)
240237

241238
private static void OnDispatch(EventHandler<ComponentEventArgs> dispatched, VB.VBComponent vbComponent)
242239
{
243-
var component = new VBComponent(vbComponent);
244-
var handler = dispatched;
245-
if (handler == null)
240+
using (var component = new VBComponent(vbComponent))
246241
{
247-
component.Dispose();
248-
return;
249-
}
250-
251-
IVBProject project;
252-
using (var components = component.Collection)
253-
{
254-
project = components.Parent;
255-
}
242+
var handler = dispatched;
243+
if (handler == null)
244+
{
245+
return;
246+
}
256247

248+
using (var components = component.Collection)
249+
using (var project = components.Parent)
250+
{
251+
if (project.Protection == ProjectProtection.Locked)
252+
{
253+
return;
254+
}
257255

258-
if (project.Protection == ProjectProtection.Locked)
259-
{
260-
project.Dispose();
261-
component.Dispose();
262-
return;
256+
var qmn = new QualifiedModuleName(component);
257+
var eventArgs = new ComponentEventArgs(qmn);
258+
handler.Invoke(component, eventArgs);
259+
}
263260
}
264-
265-
var eventArgs = new ComponentEventArgs(project.ProjectId, project, component);
266-
handler.Invoke(component, eventArgs);
267261
}
268262

269263
#endregion

0 commit comments

Comments
 (0)