Skip to content

Commit 0abf2d8

Browse files
committed
Merge branch 'next' into SplitRefactorings
# Conflicts: # Rubberduck.Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs # RubberduckTests/CodeExplorer/MockedCodeExplorer.cs # RubberduckTests/Commands/RefactorCommands/ExtractInterfaceCommandTests.cs # RubberduckTests/Refactoring/ExtractInterface/ExtractInterfaceTests.cs
2 parents c4ad4c8 + d2d3f1f commit 0abf2d8

File tree

48 files changed

+808
-429
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+808
-429
lines changed

Rubberduck.Core/AddRemoveReferences/ReferenceReconciler.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Settings;
99
using Rubberduck.SettingsProvider;
1010
using Rubberduck.UI.AddRemoveReferences;
11+
using Rubberduck.VBEditor.ComManagement;
1112
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1213

1314
namespace Rubberduck.AddRemoveReferences
@@ -29,15 +30,18 @@ public class ReferenceReconciler : IReferenceReconciler
2930
private readonly IMessageBox _messageBox;
3031
private readonly IConfigurationService<ReferenceSettings> _settings;
3132
private readonly IComLibraryProvider _libraryProvider;
33+
private readonly IProjectsProvider _projectsProvider;
3234

3335
public ReferenceReconciler(
3436
IMessageBox messageBox,
3537
IConfigurationService<ReferenceSettings> settings,
36-
IComLibraryProvider libraryProvider)
38+
IComLibraryProvider libraryProvider,
39+
IProjectsProvider projectsProvider)
3740
{
3841
_messageBox = messageBox;
3942
_settings = settings;
4043
_libraryProvider = libraryProvider;
44+
_projectsProvider = projectsProvider;
4145
}
4246

4347
public List<ReferenceModel> ReconcileReferences(IAddRemoveReferencesModel model)
@@ -58,12 +62,18 @@ public List<ReferenceModel> ReconcileReferences(IAddRemoveReferencesModel model,
5862
return new List<ReferenceModel>();
5963
}
6064

65+
var project = _projectsProvider.Project(model.Project.ProjectId);
66+
67+
if (project == null)
68+
{
69+
return new List<ReferenceModel>();
70+
}
71+
6172
var selected = allReferences.Where(reference => !reference.IsBuiltIn && reference.Priority.HasValue)
6273
.ToDictionary(reference => reference.FullPath);
6374

6475
var output = selected.Values.Where(reference => reference.IsBuiltIn).ToList();
6576

66-
var project = model.Project.Project;
6777
using (var references = project.References)
6878
{
6979
foreach (var reference in references)

Rubberduck.Core/CodeAnalysis/CodeMetrics/CodeMetricsViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ private void Synchronize(IEnumerable<Declaration> declarations)
8484

8585
foreach (var project in adding)
8686
{
87-
var model = new CodeExplorerProjectViewModel(project, ref updates, _state, _vbe, false);
87+
var model = new CodeExplorerProjectViewModel(project, ref updates, _state, _vbe, _state.ProjectsProvider,false);
8888
Projects.Add(model);
8989
}
9090
}).Wait();

Rubberduck.Core/Formatters/DeclarationFormatter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public object[] ToArray()
2121
public string ToClipboardString()
2222
{
2323
return string.Format(RubberduckUI.CodeExplorer_IExportable_DeclarationFormat,
24-
_declaration.Project.Name,
24+
_declaration.ProjectName,
2525
_declaration.CustomFolder,
2626
_declaration.ComponentName,
2727
_declaration.DeclarationType,

Rubberduck.Core/Formatters/InspectionResultFormatter.cs

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
using Rubberduck.Common;
22
using Rubberduck.Parsing.Inspections.Abstract;
3-
using Rubberduck.Inspections.Abstract;
4-
using System.IO;
53
using Rubberduck.Resources.Inspections;
64

75
namespace Rubberduck.Formatters
86
{
97
public class InspectionResultFormatter : IExportable
108
{
119
private readonly IInspectionResult _inspectionResult;
10+
private readonly string _documentName;
1211

13-
public InspectionResultFormatter(IInspectionResult inspectionResult)
12+
public InspectionResultFormatter(IInspectionResult inspectionResult, string documentName)
1413
{
1514
_inspectionResult = inspectionResult;
15+
_documentName = documentName;
1616
}
1717

1818
public object[] ToArray()
@@ -29,30 +29,10 @@ public object[] ToArray()
2929
};
3030
}
3131

32-
/// <summary>
33-
/// WARNING: This property can have side effects. It can change the ActiveVBProject if the result has a null Declaration,
34-
/// which causes a flicker in the VBE. This should only be called if it is *absolutely* necessary.
35-
/// </summary>
3632
public string ToClipboardString()
3733
{
3834
var module = _inspectionResult.QualifiedSelection.QualifiedName;
39-
var documentName = _inspectionResult.Target != null
40-
? _inspectionResult.Target.ProjectDisplayName
41-
: string.Empty;
42-
43-
//todo: Find a sane way to reimplement this.
44-
//if (string.IsNullOrEmpty(documentName))
45-
//{
46-
// var component = module.Component;
47-
// documentName = component != null
48-
// ? component.ParentProject.ProjectDisplayName
49-
// : string.Empty;
50-
//}
51-
52-
if (string.IsNullOrEmpty(documentName))
53-
{
54-
documentName = Path.GetFileName(module.ProjectPath);
55-
}
35+
var documentName = _documentName;
5636

5737
return string.Format(
5838
InspectionsUI.QualifiedSelectionInspection,

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerProjectViewModel.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Navigation.Folders;
66
using Rubberduck.Parsing.Symbols;
77
using Rubberduck.Parsing.VBA;
8+
using Rubberduck.VBEditor.ComManagement;
89
using Rubberduck.VBEditor.SafeComWrappers;
910
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1011

@@ -21,11 +22,20 @@ public class CodeExplorerProjectViewModel : CodeExplorerItemViewModel
2122
};
2223

2324
private readonly IVBE _vbe;
24-
25-
public CodeExplorerProjectViewModel(Declaration project, ref List<Declaration> declarations, RubberduckParserState state, IVBE vbe, bool references = true) : base(null, project)
25+
private readonly IProjectsProvider _projectsProvider;
26+
27+
public CodeExplorerProjectViewModel(
28+
Declaration project,
29+
ref List<Declaration> declarations,
30+
RubberduckParserState state,
31+
IVBE vbe,
32+
IProjectsProvider projectsProvider,
33+
bool references = true)
34+
: base(null, project)
2635
{
27-
State = state;
36+
State = state;
2837
_vbe = vbe;
38+
_projectsProvider = projectsProvider;
2939
ShowReferences = references;
3040

3141
SetName();
@@ -47,15 +57,23 @@ public override FontWeight FontWeight
4757
{
4858
get
4959
{
50-
if (_vbe.Kind == VBEKind.Hosted || Declaration.Project == null)
60+
if (_vbe.Kind == VBEKind.Hosted || Declaration == null)
61+
{
62+
return base.FontWeight;
63+
}
64+
65+
var project = _projectsProvider.Project(Declaration.ProjectId);
66+
if (project == null)
5167
{
5268
return base.FontWeight;
5369
}
5470

5571
using (var vbProjects = _vbe.VBProjects)
5672
using (var startProject = vbProjects?.StartProject)
5773
{
58-
return Declaration.Project.Equals(startProject) ? FontWeights.Bold : base.FontWeight;
74+
return project.Equals(startProject)
75+
? FontWeights.Bold
76+
: base.FontWeight;
5977
}
6078
}
6179
}
@@ -139,7 +157,12 @@ private void SynchronizeReferences()
139157

140158
private List<ReferenceModel> GetProjectReferenceModels()
141159
{
142-
var project = Declaration?.Project;
160+
if (Declaration == null)
161+
{
162+
return new List<ReferenceModel>();
163+
}
164+
165+
var project = _projectsProvider.Project(Declaration.ProjectId);
143166
if (project == null)
144167
{
145168
return new List<ReferenceModel>();
@@ -170,11 +193,24 @@ private void SetName()
170193
_name = Declaration?.IdentifierName ?? string.Empty;
171194

172195
// F' the flicker. Digging into the properties has some even more evil side-effects, and is a performance nightmare by comparison.
173-
_displayName = Declaration?.ProjectDisplayName ?? string.Empty;
196+
_displayName = DisplayName(Declaration);
174197

175198
OnNameChanged();
176199
}
177200

201+
private string DisplayName(Declaration declaration)
202+
{
203+
if (declaration == null)
204+
{
205+
return string.Empty;
206+
}
207+
208+
var project = _projectsProvider.Project(declaration.ProjectId);
209+
return project != null
210+
? project.ProjectDisplayName
211+
: string.Empty;
212+
}
213+
178214
private static readonly List<DeclarationType> UntrackedTypes = new List<DeclarationType>
179215
{
180216
DeclarationType.Parameter,

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
using Rubberduck.UI.Command;
1414
using Rubberduck.VBEditor.SafeComWrappers;
1515
using System.Windows;
16-
using System.Windows.Forms;
1716
using System.Windows.Input;
1817
using Rubberduck.Parsing.UIContext;
1918
using Rubberduck.Templates;
@@ -287,7 +286,7 @@ private void Synchronize(IEnumerable<Declaration> declarations)
287286

288287
foreach (var project in adding)
289288
{
290-
var model = new CodeExplorerProjectViewModel(project, ref updates, _state, _vbe) { Filter = Search };
289+
var model = new CodeExplorerProjectViewModel(project, ref updates, _state, _vbe, _state.ProjectsProvider) { Filter = Search };
291290
Projects.Add(model);
292291
}
293292

@@ -305,12 +304,12 @@ private void ParserState_ModuleStateChanged(object sender, ParseProgressEventArg
305304
return;
306305
}
307306

308-
var componentProject = _state.ProjectsProvider.Project(e.Module.ProjectId);
307+
var componentProjectId = e.Module.ProjectId;
309308

310309
var module = Projects.OfType<CodeExplorerProjectViewModel>()
311-
.FirstOrDefault(p => p.Declaration.Project?.Equals(componentProject) ?? false)?.Children
312-
.OfType<CodeExplorerComponentViewModel>().FirstOrDefault(component =>
313-
component.QualifiedSelection?.QualifiedName.Equals(e.Module) ?? false);
310+
.FirstOrDefault(p => p.Declaration?.ProjectId.Equals(componentProjectId) ?? false)?.Children
311+
.OfType<CodeExplorerComponentViewModel>()
312+
.FirstOrDefault(component => component.QualifiedSelection?.QualifiedName.Equals(e.Module) ?? false);
314313

315314
if (module == null)
316315
{

Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
using Rubberduck.Settings;
1111
using Rubberduck.SettingsProvider;
1212
using Rubberduck.VBEditor;
13+
using Rubberduck.VBEditor.ComManagement;
1314
using Rubberduck.VBEditor.SafeComWrappers;
1415
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1516

1617
namespace Rubberduck.UI.AddRemoveReferences
1718
{
1819
public interface IAddRemoveReferencesPresenterFactory
1920
{
20-
AddRemoveReferencesPresenter Create(ProjectDeclaration project);
21+
AddRemoveReferencesPresenter Create(ProjectDeclaration projectDeclaration);
2122
}
2223

2324
public class AddRemoveReferencesPresenterFactory : IAddRemoveReferencesPresenterFactory
@@ -31,25 +32,35 @@ public class AddRemoveReferencesPresenterFactory : IAddRemoveReferencesPresenter
3132
private readonly IRegisteredLibraryFinderService _finder;
3233
private readonly IReferenceReconciler _reconciler;
3334
private readonly IFileSystemBrowserFactory _browser;
35+
private readonly IProjectsProvider _projectsProvider;
3436

3537
public AddRemoveReferencesPresenterFactory(IVBE vbe,
3638
RubberduckParserState state,
3739
IConfigurationService<ReferenceSettings> settingsProvider,
3840
IRegisteredLibraryFinderService finder,
3941
IReferenceReconciler reconciler,
40-
IFileSystemBrowserFactory browser)
42+
IFileSystemBrowserFactory browser,
43+
IProjectsProvider projectsProvider)
4144
{
4245
_vbe = vbe;
4346
_state = state;
4447
_settings = settingsProvider;
4548
_finder = finder;
4649
_reconciler = reconciler;
4750
_browser = browser;
51+
_projectsProvider = projectsProvider;
4852
}
4953

50-
public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
54+
public AddRemoveReferencesPresenter Create(ProjectDeclaration projectDeclaration)
5155
{
52-
if (project is null)
56+
if (projectDeclaration is null)
57+
{
58+
return null;
59+
}
60+
61+
var project = _projectsProvider.Project(projectDeclaration.ProjectId);
62+
63+
if (project == null)
5364
{
5465
return null;
5566
}
@@ -75,7 +86,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
7586
}
7687

7788
var models = new Dictionary<RegisteredLibraryKey, ReferenceModel>();
78-
using (var references = project.Project?.References)
89+
using (var references = project.References)
7990
{
8091
if (references is null)
8192
{
@@ -101,7 +112,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
101112
: new ReferenceModel(reference, priority++);
102113

103114
adding.IsUsed = adding.IsBuiltIn ||
104-
_state.DeclarationFinder.IsReferenceUsedInProject(project,
115+
_state.DeclarationFinder.IsReferenceUsedInProject(projectDeclaration,
105116
adding.ToReferenceInfo());
106117

107118
models.Add(libraryId, adding);
@@ -117,7 +128,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
117128
}
118129

119130
var settings = _settings.Read();
120-
model = new AddRemoveReferencesModel(_state, project, models.Values, settings);
131+
model = new AddRemoveReferencesModel(_state, projectDeclaration, models.Values, settings);
121132
if (AddRemoveReferencesViewModel.HostHasProjects)
122133
{
123134
model.References.AddRange(GetUserProjectFolderModels(model.Settings).Where(proj =>
@@ -136,7 +147,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
136147

137148
return (model != null)
138149
? new AddRemoveReferencesPresenter(
139-
new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler, _browser)))
150+
new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler, _browser, _projectsProvider)))
140151
: null;
141152
}
142153

0 commit comments

Comments
 (0)