Skip to content

Commit d3263e5

Browse files
committed
Merge branch 'rubberduck-vba/next' into next
2 parents f05f5ce + 8c57bed commit d3263e5

File tree

356 files changed

+8749
-44472
lines changed

Some content is hidden

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

356 files changed

+8749
-44472
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Branch | Description | Build Status |
3535

3636
Rubberduck is a COM add-in for the VBA IDE (VBE).
3737

38-
Copyright (C) 2014-2017 Mathieu Guindon & Christopher McClellan
38+
Copyright (C) 2014-2018 Mathieu Guindon & Christopher McClellan
3939

4040
This program is free software: you can redistribute it and/or modify
4141
it under the terms of the GNU General Public License as published by

RetailCoder.VBE/API/VBA/ParserState.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Rubberduck.Parsing.VBA;
1111
using Rubberduck.UI.Command.MenuItems;
1212
using Rubberduck.Parsing.Symbols;
13+
using Rubberduck.VBEditor.ComManagement;
1314
using Rubberduck.VBEditor.SafeComWrappers.VBA;
1415

1516
namespace Rubberduck.API.VBA
@@ -64,14 +65,15 @@ public void Initialize(Microsoft.Vbe.Interop.VBE vbe)
6465

6566
_vbe = new VBE(vbe);
6667
var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory();
67-
_state = new RubberduckParserState(null, declarationFinderFactory);
68+
var projectRepository = new ProjectsRepository(_vbe);
69+
_state = new RubberduckParserState(null, projectRepository, declarationFinderFactory);
6870
_state.StateChanged += _state_StateChanged;
6971

7072
var exporter = new ModuleExporter();
7173

7274
Func<IVBAPreprocessor> preprocessorFactory = () => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
73-
_attributeParser = new AttributeParser(exporter, preprocessorFactory);
74-
var projectManager = new ProjectManager(_state, _vbe);
75+
_attributeParser = new AttributeParser(exporter, preprocessorFactory, _state.ProjectsProvider);
76+
var projectManager = new RepositoryProjectManager(projectRepository);
7577
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
7678
var parserStateManager = new ParserStateManager(_state);
7779
var referenceRemover = new ReferenceRemover(_state, moduleToModuleReferenceManager);

RetailCoder.VBE/Extension.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ public void OnConnection(object Application, ext_ConnectMode ConnectMode, object
6262

6363
var addin = (AddIn)AddInInst;
6464
_addin = new VBEditor.SafeComWrappers.VBA.AddIn(addin) { Object = this };
65+
66+
#if DEBUG
67+
// FOR DEBUGGING/DEVELOPMENT PURPOSES, ALLOW ACCESS TO SOME VBETypeLibsAPI FEATURES FROM VBA
68+
_addin.Object = new Rubberduck.VBEditor.ComManagement.TypeLibsAPI.VBETypeLibsAPI_Object(_ide);
69+
#endif
6570
}
6671
else if (Application is Microsoft.VB6.Interop.VBIDE.VBE vbe2)
6772
{
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Collections.Generic;
2+
using Rubberduck.Parsing.Inspections.Abstract;
3+
4+
namespace Rubberduck.Inspections
5+
{
6+
public interface IInspectionProvider
7+
{
8+
IEnumerable<IInspection> Inspections { get; }
9+
}
10+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Rubberduck.Parsing.Inspections.Abstract;
4+
using Rubberduck.Settings;
5+
6+
namespace Rubberduck.Inspections
7+
{
8+
public class InspectionProvider : IInspectionProvider
9+
{
10+
public InspectionProvider(IEnumerable<IInspection> inspections)
11+
{
12+
var defaultSettings = new DefaultSettings<CodeInspectionSettings>().Default;
13+
var defaultNames = defaultSettings.CodeInspections.Select(x => x.Name);
14+
var defaultInspections = inspections.Where(inspection => defaultNames.Contains(inspection.Name));
15+
16+
foreach (var inspection in defaultInspections)
17+
{
18+
inspection.InspectionType = defaultSettings.CodeInspections.First(setting => setting.Name == inspection.Name).InspectionType;
19+
}
20+
21+
Inspections = inspections;
22+
}
23+
24+
public IEnumerable<IInspection> Inspections { get; }
25+
}
26+
}

RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerComponentViewModel.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.VBEditor;
88
using resx = Rubberduck.UI.CodeExplorer.CodeExplorer;
99
using Rubberduck.Parsing.Annotations;
10+
using Rubberduck.VBEditor.ComManagement;
1011
using Rubberduck.VBEditor.SafeComWrappers;
1112

1213
namespace Rubberduck.Navigation.CodeExplorer
@@ -33,10 +34,13 @@ public class CodeExplorerComponentViewModel : CodeExplorerItemViewModel, ICodeEx
3334
DeclarationType.Variable,
3435
};
3536

36-
public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations)
37+
private readonly IProjectsProvider _projectsProvider;
38+
39+
public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations, IProjectsProvider projectsProvider)
3740
{
3841
Parent = parent;
3942
Declaration = declaration;
43+
_projectsProvider = projectsProvider;
4044
_icon = Icons[DeclarationType];
4145
Items = declarations.GroupBy(item => item.Scope).SelectMany(grouping =>
4246
grouping.Where(item => item.ParentDeclaration != null
@@ -48,12 +52,17 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat
4852

4953
_name = Declaration.IdentifierName;
5054

51-
var component = declaration.QualifiedName.QualifiedModuleName.Component;
55+
var qualifiedModuleName = declaration.QualifiedName.QualifiedModuleName;
5256
try
5357
{
54-
if (component.Type == ComponentType.Document)
58+
if (qualifiedModuleName.ComponentType == ComponentType.Document)
5559
{
56-
var parenthesizedName = component.Properties["Name"].Value.ToString();
60+
var component = _projectsProvider.Component(qualifiedModuleName);
61+
string parenthesizedName;
62+
using (var properties = component.Properties)
63+
{
64+
parenthesizedName = properties["Name"].Value.ToString() ?? String.Empty;
65+
}
5766

5867
if (ContainsBuiltinDocumentPropertiesProperty())
5968
{
@@ -79,7 +88,7 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat
7988

8089
private bool ContainsBuiltinDocumentPropertiesProperty()
8190
{
82-
var properties = Declaration.QualifiedName.QualifiedModuleName.Component.Properties;
91+
using (var properties = _projectsProvider.Component(Declaration.QualifiedName.QualifiedModuleName).Properties)
8392
{
8493
return properties.Any(item => item.Name == "BuiltinDocumentProperties");
8594
}

RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerCustomFolderViewModel.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Windows.Media.Imaging;
55
using Rubberduck.Parsing.Symbols;
66
using Rubberduck.VBEditor;
7+
using Rubberduck.VBEditor.ComManagement;
78
using resx = Rubberduck.Properties.Resources;
89

910
namespace Rubberduck.Navigation.CodeExplorer
@@ -18,9 +19,12 @@ public class CodeExplorerCustomFolderViewModel : CodeExplorerItemViewModel
1819
DeclarationType.UserForm,
1920
};
2021

21-
public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath)
22+
private readonly IProjectsProvider _projectsProvider;
23+
24+
public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath, IProjectsProvider projectsProvider)
2225
{
2326
_parent = parent;
27+
_projectsProvider = projectsProvider;
2428
FullPath = fullPath;
2529
Name = name.Replace("\"", string.Empty);
2630
FolderAttribute = string.Format("@Folder(\"{0}\")", fullPath.Replace("\"", string.Empty));
@@ -42,7 +46,7 @@ public void AddNodes(List<Declaration> declarations)
4246
var members = declarations.Where(item =>
4347
!ComponentTypes.Contains(item.DeclarationType) && item.ComponentName == moduleName);
4448

45-
AddChild(new CodeExplorerComponentViewModel(this, parent, members));
49+
AddChild(new CodeExplorerComponentViewModel(this, parent, members, _projectsProvider));
4650
}
4751
catch (InvalidOperationException exception)
4852
{

RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerItemViewModel.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ public override int Compare(CodeExplorerItemViewModel x, CodeExplorerItemViewMod
8585

8686
if (x.ExpandedIcon != y.ExpandedIcon)
8787
{
88-
// ReSharper disable PossibleInvalidOperationException - this will have a component
89-
var xComponent = x.QualifiedSelection.Value.QualifiedName.Component;
90-
var yComponent = y.QualifiedSelection.Value.QualifiedName.Component;
88+
// ReSharper disable PossibleInvalidOperationException - this will have a QualifiedSelection
89+
var xQmn = x.QualifiedSelection.Value.QualifiedName;
90+
var yQmn = y.QualifiedSelection.Value.QualifiedName;
9191

92-
if (xComponent.Type == ComponentType.Document ^ yComponent.Type == ComponentType.Document)
92+
if (xQmn.ComponentType == ComponentType.Document ^ yQmn.ComponentType == ComponentType.Document)
9393
{
94-
return xComponent.Type == ComponentType.Document ? -1 : 1;
94+
return xQmn.ComponentType == ComponentType.Document ? -1 : 1;
9595
}
9696
}
9797

RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public sealed class CodeExplorerViewModel : ViewModelBase, IDisposable
2828
{
2929
private readonly FolderHelper _folderHelper;
3030
private readonly RubberduckParserState _state;
31-
private IConfigProvider<GeneralSettings> _generalSettingsProvider;
3231
private readonly IConfigProvider<WindowSettings> _windowSettingsProvider;
3332
private readonly GeneralSettings _generalSettings;
3433
private readonly WindowSettings _windowSettings;
@@ -42,7 +41,6 @@ public CodeExplorerViewModel(FolderHelper folderHelper, RubberduckParserState st
4241
_state = state;
4342
_state.StateChanged += HandleStateChanged;
4443
_state.ModuleStateChanged += ParserState_ModuleStateChanged;
45-
_generalSettingsProvider = generalSettingsProvider;
4644
_windowSettingsProvider = windowSettingsProvider;
4745

4846
if (generalSettingsProvider != null)
@@ -374,8 +372,7 @@ private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgress
374372
return;
375373
}
376374

377-
var components = e.Module.Component.Collection;
378-
var componentProject = components.Parent;
375+
var componentProject = _state.ProjectsProvider.Project(e.Module.ProjectId);
379376
{
380377
var projectNode = Projects.OfType<CodeExplorerProjectViewModel>()
381378
.FirstOrDefault(p => p.Declaration.Project.Equals(componentProject));
@@ -399,13 +396,13 @@ private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgress
399396
{
400397
if (folderNode == null)
401398
{
402-
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName);
399+
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName, _state.ProjectsProvider);
403400
projectNode.AddChild(folderNode);
404401
}
405402

406403
var declaration = CreateDeclaration(e.Module);
407404
var newNode =
408-
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>())
405+
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>(), _state.ProjectsProvider)
409406
{
410407
IsErrorState = true
411408
};
@@ -427,7 +424,7 @@ private Declaration CreateDeclaration(QualifiedModuleName module)
427424
{
428425
var projectDeclaration =
429426
_state.DeclarationFinder.UserDeclarations(DeclarationType.Project)
430-
.FirstOrDefault(item => item.Project.VBComponents.Contains(module.Component));
427+
.FirstOrDefault(item => item.Project.ProjectId == module.ProjectId);
431428

432429
if (module.ComponentType == ComponentType.StandardModule)
433430
{

RetailCoder.VBE/Navigation/Folders/FolderHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration =
2323
{
2424
var delimiter = GetDelimiter();
2525

26-
var root = new CodeExplorerCustomFolderViewModel(null, string.Empty, string.Empty);
26+
var root = new CodeExplorerCustomFolderViewModel(null, string.Empty, string.Empty, _state.ProjectsProvider);
2727

2828
var items = declaration == null
2929
? _state.AllUserDeclarations.ToList()
@@ -46,7 +46,7 @@ public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration =
4646
var node = currentNode.Items.FirstOrDefault(i => i.Name == section);
4747
if (node == null)
4848
{
49-
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath);
49+
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath, _state.ProjectsProvider);
5050
currentNode.AddChild(node);
5151
}
5252

0 commit comments

Comments
 (0)