Skip to content

Commit d421173

Browse files
committed
Changes following PR comments, fixed tests
1 parent 5a424ee commit d421173

File tree

6 files changed

+31
-27
lines changed

6 files changed

+31
-27
lines changed

Rubberduck.Core/UI/CodeExplorer/Commands/DeleteCommand.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ namespace Rubberduck.UI.CodeExplorer.Commands
1313
public class DeleteCommand : CodeExplorerCommandBase
1414
{
1515
private readonly RemoveCommand _removeCommand;
16-
private readonly IProjectsRepository _projectsRepository;
16+
private readonly IProjectsProvider _projectsProvider;
1717
private readonly IMessageBox _messageBox;
1818
private readonly IVBE _vbe;
1919

20-
public DeleteCommand(RemoveCommand removeCommand, IProjectsRepository projectsRepository, IMessageBox messageBox, IVBE vbe)
20+
public DeleteCommand(RemoveCommand removeCommand, IProjectsProvider projectsProvider, IMessageBox messageBox, IVBE vbe)
2121
{
2222
_removeCommand = removeCommand;
23-
_projectsRepository = projectsRepository;
23+
_projectsProvider = projectsProvider;
2424
_messageBox = messageBox;
2525
_vbe = vbe;
2626

@@ -41,7 +41,7 @@ protected override void OnExecute(object parameter)
4141
}
4242

4343
var qualifiedModuleName = node.Declaration.QualifiedName.QualifiedModuleName;
44-
var component = _projectsRepository.Component(qualifiedModuleName);
44+
var component = _projectsProvider.Component(qualifiedModuleName);
4545
if (component is null)
4646
{
4747
return;

Rubberduck.VBEEditor/ComManagement/IProjectsProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,5 @@ public interface IProjectsProvider : IDisposable
1414
IEnumerable<(QualifiedModuleName QualifiedModuleName, IVBComponent Component)> Components();
1515
IEnumerable<(QualifiedModuleName QualifiedModuleName, IVBComponent Component)> Components(string projectId);
1616
IVBComponent Component(QualifiedModuleName qualifiedModuleName);
17-
void RemoveComponent(QualifiedModuleName qualifiedModuleName);
1817
}
1918
}

Rubberduck.VBEEditor/ComManagement/IProjectsRepository.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ public interface IProjectsRepository : IProjectsProvider
44
{
55
void Refresh();
66
void Refresh(string projectId);
7+
void RemoveComponent(QualifiedModuleName qualifiedModuleName);
78
}
89
}

Rubberduck.VBEEditor/ComManagement/ProjectsRepository.cs

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,15 @@ private T EvaluateWithinReadLock<T>(Func<T> function) where T: class
223223
var readLockTaken = false;
224224
try
225225
{
226-
_refreshProtectionLock.EnterUpgradeableReadLock();
226+
_refreshProtectionLock.EnterReadLock();
227227
readLockTaken = true;
228228
return function.Invoke();
229229
}
230230
finally
231231
{
232232
if (readLockTaken)
233233
{
234-
_refreshProtectionLock.ExitUpgradeableReadLock();
234+
_refreshProtectionLock.ExitReadLock();
235235
}
236236
}
237237
}
@@ -276,25 +276,16 @@ public IVBComponent Component(QualifiedModuleName qualifiedModuleName)
276276

277277
public void RemoveComponent(QualifiedModuleName qualifiedModuleName)
278278
{
279-
EvaluateWithinReadLock(() =>
279+
ExecuteWithinWriteLock(() =>
280280
{
281-
if (_components.TryGetValue(qualifiedModuleName, out var component))
281+
if (!_components.TryGetValue(qualifiedModuleName, out var component) ||
282+
!_componentsCollections.TryGetValue(qualifiedModuleName.ProjectId, out var components))
282283
{
283-
ExecuteWithinWriteLock(() =>
284-
{
285-
if (_projects.TryGetValue(qualifiedModuleName.ProjectId, out var project))
286-
{
287-
using (var components = project.VBComponents)
288-
{
289-
// Remove the actual component...
290-
components.Remove(component);
291-
}
292-
}
293-
// ...and our cached copy of it
294-
_components.Remove(qualifiedModuleName);
295-
});
284+
return;
296285
}
297-
return new { };
286+
287+
_components.Remove(qualifiedModuleName);
288+
components.Remove(component);
298289
});
299290
}
300291

RubberduckTests/CodeExplorer/CodeExplorerViewModelTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ public void RemoveCommand_RemovesModuleWhenPromptOk()
467467
var component = explorer.VbComponent.Object;
468468

469469
explorer.ViewModel.RemoveCommand.Execute(removing);
470-
explorer.VbComponents.Verify(c => c.Remove(component), Times.Once);
470+
explorer.ProjectsRepository.Verify(c => c.RemoveComponent(component.QualifiedModuleName), Times.Once);
471471
}
472472
}
473473

@@ -503,8 +503,9 @@ public void RemoveCommand_GivenMsgBoxNo_RemovesModuleNoExport()
503503
var removing = explorer.ViewModel.SelectedItem;
504504
var component = explorer.VbComponent.Object;
505505

506+
506507
explorer.ViewModel.RemoveCommand.Execute(removing);
507-
explorer.VbComponents.Verify(c => c.Remove(component), Times.Once);
508+
explorer.ProjectsRepository.Verify(c => c.RemoveComponent(component.QualifiedModuleName), Times.Once);
508509
}
509510
}
510511

RubberduckTests/CodeExplorer/MockedCodeExplorer.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
using Rubberduck.UnitTesting;
2525
using Rubberduck.UnitTesting.CodeGeneration;
2626
using Rubberduck.UnitTesting.Settings;
27+
using Rubberduck.VBEditor;
28+
using Rubberduck.VBEditor.ComManagement;
2729
using Rubberduck.VBEditor.SourceCodeHandling;
2830
using Rubberduck.VBEditor.Utility;
2931
using RubberduckTests.Settings;
@@ -87,6 +89,10 @@ public MockedCodeExplorer(ProjectType projectType, ComponentType componentType =
8789
VbProject = project.Build();
8890
Vbe = builder.AddProject(VbProject).Build();
8991

92+
ProjectsRepository = new Mock<IProjectsRepository>();
93+
ProjectsRepository.Setup(x => x.Project(It.IsAny<string>())).Returns(VbProject.Object);
94+
ProjectsRepository.Setup(x => x.Component(It.IsAny<QualifiedModuleName>())).Returns(VbComponent.Object);
95+
9096
SetupViewModelAndParse();
9197
}
9298

@@ -120,6 +126,10 @@ public MockedCodeExplorer(ProjectType projectType,
120126
VbProject = project.Build();
121127
Vbe = builder.AddProject(VbProject).Build();
122128

129+
ProjectsRepository = new Mock<IProjectsRepository>();
130+
ProjectsRepository.Setup(x => x.Project(It.IsAny<string>())).Returns(VbProject.Object);
131+
ProjectsRepository.Setup(x => x.Component(It.IsAny<QualifiedModuleName>())).Returns(VbComponent.Object);
132+
123133
SetupViewModelAndParse();
124134

125135
VbProject.SetupGet(m => m.VBComponents.Count).Returns(componentTypes.Count);
@@ -130,7 +140,8 @@ private void SetupViewModelAndParse()
130140
var parser = MockParser.Create(Vbe.Object, null, MockVbeEvents.CreateMockVbeEvents(Vbe));
131141
State = parser.State;
132142

133-
var removeCommand = new RemoveCommand(BrowserFactory.Object, MessageBox.Object, State.ProjectsProvider);
143+
var exportCommand = new ExportCommand(BrowserFactory.Object, MessageBox.Object, State.ProjectsProvider, Vbe.Object);
144+
var removeCommand = new RemoveCommand(exportCommand, ProjectsRepository.Object, MessageBox.Object, Vbe.Object);
134145

135146
ViewModel = new CodeExplorerViewModel(State, removeCommand,
136147
_generalSettingsProvider.Object,
@@ -157,6 +168,7 @@ private void SetupViewModelAndParse()
157168
public Mock<IOpenFileDialog> OpenDialog { get; }
158169
public Mock<IFolderBrowser> FolderBrowser { get; }
159170
public Mock<IMessageBox> MessageBox { get; } = new Mock<IMessageBox>();
171+
public Mock<IProjectsRepository> ProjectsRepository { get; }
160172

161173
public WindowSettings WindowSettings { get; } = new WindowSettings();
162174

@@ -354,7 +366,7 @@ public void ExecuteExportCommand()
354366

355367
public MockedCodeExplorer ImplementExportCommand()
356368
{
357-
ViewModel.ExportCommand = new ExportCommand(BrowserFactory.Object, MessageBox.Object, State.ProjectsProvider);
369+
ViewModel.ExportCommand = new ExportCommand(BrowserFactory.Object, MessageBox.Object, State.ProjectsProvider, Vbe.Object);
358370
return this;
359371
}
360372

0 commit comments

Comments
 (0)