Skip to content

Commit 6efdf24

Browse files
committed
Remove Declaration.Project
1 parent dc732ef commit 6efdf24

36 files changed

+366
-185
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/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/Navigation/CodeExplorer/CodeExplorerProjectViewModel.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@ public class CodeExplorerProjectViewModel : CodeExplorerItemViewModel
2222

2323
private readonly IVBE _vbe;
2424

25-
public CodeExplorerProjectViewModel(Declaration project, ref List<Declaration> declarations, RubberduckParserState state, IVBE vbe, bool references = true) : base(null, project)
25+
public CodeExplorerProjectViewModel(
26+
Declaration project,
27+
ref List<Declaration> declarations,
28+
RubberduckParserState state,
29+
IVBE vbe,
30+
bool references = true)
31+
: base(null, project)
2632
{
2733
State = state;
2834
_vbe = vbe;
@@ -47,15 +53,23 @@ public override FontWeight FontWeight
4753
{
4854
get
4955
{
50-
if (_vbe.Kind == VBEKind.Hosted || Declaration.Project == null)
56+
if (_vbe.Kind == VBEKind.Hosted || Declaration == null)
57+
{
58+
return base.FontWeight;
59+
}
60+
61+
var project = State.ProjectsProvider.Project(Declaration.ProjectId);
62+
if (project == null)
5163
{
5264
return base.FontWeight;
5365
}
5466

5567
using (var vbProjects = _vbe.VBProjects)
5668
using (var startProject = vbProjects?.StartProject)
5769
{
58-
return Declaration.Project.Equals(startProject) ? FontWeights.Bold : base.FontWeight;
70+
return project.Equals(startProject)
71+
? FontWeights.Bold
72+
: base.FontWeight;
5973
}
6074
}
6175
}
@@ -139,7 +153,12 @@ private void SynchronizeReferences()
139153

140154
private List<ReferenceModel> GetProjectReferenceModels()
141155
{
142-
var project = Declaration?.Project;
156+
if (Declaration == null)
157+
{
158+
return new List<ReferenceModel>();
159+
}
160+
161+
var project = State.ProjectsProvider.Project(Declaration.ProjectId);
143162
if (project == null)
144163
{
145164
return new List<ReferenceModel>();

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 4 additions & 5 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;
@@ -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: 18 additions & 7 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 =>

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using Rubberduck.VBEditor.ComManagement;
23
using Rubberduck.VBEditor.Events;
34
using Rubberduck.VBEditor.SafeComWrappers;
45

@@ -7,8 +8,11 @@ namespace Rubberduck.UI.CodeExplorer.Commands
78
public class AddClassModuleCommand : AddComponentCommandBase
89
{
910
public AddClassModuleCommand(
10-
ICodeExplorerAddComponentService addComponentService, IVbeEvents vbeEvents)
11-
: base(addComponentService, vbeEvents) { }
11+
ICodeExplorerAddComponentService addComponentService,
12+
IVbeEvents vbeEvents,
13+
IProjectsProvider projectsProvider)
14+
: base(addComponentService, vbeEvents, projectsProvider)
15+
{}
1216

1317
public override IEnumerable<ProjectType> AllowableProjectTypes => ProjectTypes.All;
1418

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using System.Runtime.InteropServices;
55
using Rubberduck.Navigation.CodeExplorer;
6+
using Rubberduck.VBEditor.ComManagement;
67
using Rubberduck.VBEditor.Events;
78
using Rubberduck.VBEditor.SafeComWrappers;
89

@@ -19,12 +20,16 @@ public abstract class AddComponentCommandBase : CodeExplorerCommandBase
1920
};
2021

2122
private readonly ICodeExplorerAddComponentService _addComponentService;
23+
private readonly IProjectsProvider _projectsProvider;
2224

2325
protected AddComponentCommandBase(
24-
ICodeExplorerAddComponentService addComponentService, IVbeEvents vbeEvents)
26+
ICodeExplorerAddComponentService addComponentService,
27+
IVbeEvents vbeEvents,
28+
IProjectsProvider projectsProvider)
2529
: base(vbeEvents)
2630
{
2731
_addComponentService = addComponentService;
32+
_projectsProvider = projectsProvider;
2833

2934
AddToCanExecuteEvaluation(SpecialEvaluateCanExecute);
3035
}
@@ -50,8 +55,9 @@ private bool SpecialEvaluateCanExecute(object parameter)
5055

5156
try
5257
{
53-
var project = node.Declaration.Project;
54-
return AllowableProjectTypes.Contains(project.Type);
58+
var project = _projectsProvider.Project(node.Declaration.ProjectId);
59+
return project != null
60+
&& AllowableProjectTypes.Contains(project.Type);
5561
}
5662
catch (COMException)
5763
{

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Diagnostics.CodeAnalysis;
33
using Rubberduck.Navigation.CodeExplorer;
4+
using Rubberduck.VBEditor.ComManagement;
45
using Rubberduck.VBEditor.Events;
56
using Rubberduck.VBEditor.SafeComWrappers;
67
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
@@ -12,10 +13,16 @@ public class AddMDIFormCommand : AddComponentCommandBase
1213
{
1314
private static readonly ProjectType[] Types = { ProjectType.StandardExe, ProjectType.ActiveXExe };
1415

16+
private readonly IProjectsProvider _projectsProvider;
17+
1518
public AddMDIFormCommand(
16-
ICodeExplorerAddComponentService addComponentService, IVbeEvents vbeEvents)
17-
: base(addComponentService, vbeEvents)
19+
ICodeExplorerAddComponentService addComponentService,
20+
IVbeEvents vbeEvents,
21+
IProjectsProvider projectsProvider)
22+
: base(addComponentService, vbeEvents, projectsProvider)
1823
{
24+
_projectsProvider = projectsProvider;
25+
1926
AddToCanExecuteEvaluation(SpecialEvaluateCanExecute);
2027
}
2128

@@ -30,7 +37,9 @@ private bool SpecialEvaluateCanExecute(object parameter)
3037
return false;
3138
}
3239

33-
var project = node.Declaration?.Project;
40+
var project = node.Declaration != null
41+
? _projectsProvider.Project(node.Declaration.ProjectId)
42+
: null;
3443

3544
return EvaluateCanExecuteForProject(project);
3645
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using Rubberduck.VBEditor.ComManagement;
23
using Rubberduck.VBEditor.Events;
34
using Rubberduck.VBEditor.SafeComWrappers;
45

@@ -7,8 +8,11 @@ namespace Rubberduck.UI.CodeExplorer.Commands
78
public class AddPropertyPageCommand : AddComponentCommandBase
89
{
910
public AddPropertyPageCommand(
10-
ICodeExplorerAddComponentService addComponentService, IVbeEvents vbeEvents)
11-
: base(addComponentService, vbeEvents) { }
11+
ICodeExplorerAddComponentService addComponentService,
12+
IVbeEvents vbeEvents,
13+
IProjectsProvider projectsProvider)
14+
: base(addComponentService, vbeEvents, projectsProvider)
15+
{}
1216

1317
public override IEnumerable<ProjectType> AllowableProjectTypes => ProjectTypes.VB6;
1418

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using Rubberduck.VBEditor.ComManagement;
23
using Rubberduck.VBEditor.Events;
34
using Rubberduck.VBEditor.SafeComWrappers;
45

@@ -7,8 +8,10 @@ namespace Rubberduck.UI.CodeExplorer.Commands
78
public class AddStdModuleCommand : AddComponentCommandBase
89
{
910
public AddStdModuleCommand(
10-
ICodeExplorerAddComponentService addComponentService, IVbeEvents vbeEvents)
11-
: base(addComponentService, vbeEvents)
11+
ICodeExplorerAddComponentService addComponentService,
12+
IVbeEvents vbeEvents,
13+
IProjectsProvider projectsProvider)
14+
: base(addComponentService, vbeEvents, projectsProvider)
1215
{ }
1316

1417
public override IEnumerable<ProjectType> AllowableProjectTypes => ProjectTypes.All;

0 commit comments

Comments
 (0)