Skip to content

Commit 06ae0be

Browse files
committed
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck into CleanComSafeLeakRound2
# Conflicts: # Rubberduck.VBEditor.VBA/SafeComWrappers/Application/FallbackApp.cs # Rubberduck.VBEditor.VBA/SafeComWrappers/VB/VBE.cs # RubberduckTests/CodeExplorer/CodeExplorerTests.cs
2 parents 1d1b55a + c13d151 commit 06ae0be

File tree

71 files changed

+1138
-876
lines changed

Some content is hidden

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

71 files changed

+1138
-876
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ If you like this project and would like to thank its contributors, you are welco
1818

1919
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/rubberduck-vba/Rubberduck.svg)](http://isitmaintained.com/project/rubberduck-vba/Rubberduck "Average time to resolve an issue") [![Percentage of issues still open](http://isitmaintained.com/badge/open/rubberduck-vba/Rubberduck.svg)](http://isitmaintained.com/project/rubberduck-vba/Rubberduck "Percentage of issues still open")
2020

21-
> **[rubberduckvba.com](http://rubberduckvba.com)** [Wiki](https://github.com/retailcoder/Rubberduck/wiki) [Rubberduck News](https://rubberduckvba.wordpress.com/)
21+
> **[rubberduckvba.com](http://rubberduckvba.com)** [Wiki](https://github.com/rubberduck-vba/Rubberduck/wiki) [Rubberduck News](https://rubberduckvba.wordpress.com/)
2222
> devs@rubberduckvba.com
2323
> Follow [@rubberduckvba](https://twitter.com/rubberduckvba) on Twitter
2424

Rubberduck.Core/AutoComplete/Service/AutoCompleteService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ private void Enable()
5757

5858
if (!_enabled)
5959
{
60-
VBENativeServices.KeyDown += HandleKeyDown;
61-
VBENativeServices.IntelliSenseChanged += HandleIntelliSenseChanged;
60+
VbeNativeServices.KeyDown += HandleKeyDown;
61+
VbeNativeServices.IntelliSenseChanged += HandleIntelliSenseChanged;
6262
_enabled = true;
6363
}
6464
}
@@ -67,8 +67,8 @@ private void Disable()
6767
{
6868
if (_enabled && _initialized)
6969
{
70-
VBENativeServices.KeyDown -= HandleKeyDown;
71-
VBENativeServices.IntelliSenseChanged -= HandleIntelliSenseChanged;
70+
VbeNativeServices.KeyDown -= HandleKeyDown;
71+
VbeNativeServices.IntelliSenseChanged -= HandleIntelliSenseChanged;
7272
_enabled = false;
7373
_popupShown = false;
7474
}

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerComponentViewModel.cs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
using System.Linq;
55
using System.Runtime.InteropServices;
66
using System.Windows.Media.Imaging;
7+
using NLog;
78
using Rubberduck.Parsing.Symbols;
89
using Rubberduck.VBEditor;
910
using Rubberduck.Parsing.Annotations;
1011
using Rubberduck.VBEditor.ComManagement;
1112
using Rubberduck.VBEditor.SafeComWrappers;
1213
using Rubberduck.Resources.CodeExplorer;
14+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1315

1416
namespace Rubberduck.Navigation.CodeExplorer
1517
{
@@ -36,13 +38,15 @@ public class CodeExplorerComponentViewModel : CodeExplorerItemViewModel, ICodeEx
3638
};
3739

3840
private readonly IProjectsProvider _projectsProvider;
41+
private readonly IVBE _vbe;
3942

40-
public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations, IProjectsProvider projectsProvider)
43+
public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations, IProjectsProvider projectsProvider, IVBE vbe)
4144
{
4245
Parent = parent;
4346
Declaration = declaration;
4447
_projectsProvider = projectsProvider;
45-
48+
_vbe = vbe;
49+
4650
_icon = Icons.ContainsKey(DeclarationType)
4751
? Icons[DeclarationType]
4852
: GetImageSource(CodeExplorerUI.status_offline);
@@ -65,15 +69,19 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat
6569
switch (qualifiedModuleName.ComponentType)
6670
{
6771
case ComponentType.Document:
68-
var component = _projectsProvider.Component(qualifiedModuleName);
69-
string parenthesizedName;
70-
using (var properties = component.Properties)
71-
using (var nameProperty = properties["Name"])
72+
var parenthesizedName = string.Empty;
73+
var state = DocumentState.Inaccessible;
74+
using (var app = _vbe.HostApplication())
7275
{
73-
parenthesizedName = nameProperty.Value.ToString() ?? string.Empty;
76+
if (app != null)
77+
{
78+
var document = app.GetDocument(qualifiedModuleName);
79+
parenthesizedName = document?.DocumentName ?? string.Empty;
80+
state = document?.State ?? DocumentState.Inaccessible;
81+
}
7482
}
75-
76-
if (ContainsBuiltinDocumentPropertiesProperty())
83+
84+
if (state == DocumentState.DesignView && ContainsBuiltinDocumentPropertiesProperty())
7785
{
7886
CodeExplorerItemViewModel node = this;
7987
while (node.Parent != null)
@@ -85,7 +93,10 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat
8593
}
8694
else
8795
{
88-
_name += " (" + parenthesizedName + ")";
96+
if (!string.IsNullOrWhiteSpace(parenthesizedName))
97+
{
98+
_name += " (" + parenthesizedName + ")";
99+
}
89100
}
90101
break;
91102

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerCustomFolderViewModel.cs

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

910
namespace Rubberduck.Navigation.CodeExplorer
1011
{
@@ -19,11 +20,14 @@ public class CodeExplorerCustomFolderViewModel : CodeExplorerItemViewModel
1920
};
2021

2122
private readonly IProjectsProvider _projectsProvider;
23+
private readonly IVBE _vbe;
2224

23-
public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath, IProjectsProvider projectsProvider)
25+
public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath, IProjectsProvider projectsProvider, IVBE vbe)
2426
{
2527
_parent = parent;
2628
_projectsProvider = projectsProvider;
29+
_vbe = vbe;
30+
2731
FullPath = fullPath;
2832
Name = name.Replace("\"", string.Empty);
2933
FolderAttribute = string.Format("@Folder(\"{0}\")", fullPath.Replace("\"", string.Empty));
@@ -45,7 +49,7 @@ public void AddNodes(List<Declaration> declarations)
4549
var members = declarations.Where(item =>
4650
!ComponentTypes.Contains(item.DeclarationType) && item.ComponentName == moduleName);
4751

48-
AddChild(new CodeExplorerComponentViewModel(this, parent, members, _projectsProvider));
52+
AddChild(new CodeExplorerComponentViewModel(this, parent, members, _projectsProvider, _vbe));
4953
}
5054
catch (InvalidOperationException exception)
5155
{

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,13 @@ private void ParserState_ModuleStateChanged(object sender, ParseProgressEventArg
382382
{
383383
if (folderNode == null)
384384
{
385-
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName, _state.ProjectsProvider);
385+
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName, _state.ProjectsProvider, _vbe);
386386
projectNode.AddChild(folderNode);
387387
}
388388

389389
var declaration = CreateDeclaration(e.Module);
390390
var newNode =
391-
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>(), _state.ProjectsProvider)
391+
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>(), _state.ProjectsProvider, _vbe)
392392
{
393393
IsErrorState = true
394394
};

Rubberduck.Core/Navigation/Folders/FolderHelper.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
using Rubberduck.Navigation.CodeExplorer;
33
using Rubberduck.Parsing.Symbols;
44
using Rubberduck.Parsing.VBA;
5+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
56

67
namespace Rubberduck.Navigation.Folders
78
{
89
public class FolderHelper
910
{
1011
private readonly RubberduckParserState _state;
12+
private readonly IVBE _vbe;
1113

1214
private static readonly DeclarationType[] ComponentTypes =
1315
{
@@ -17,13 +19,17 @@ public class FolderHelper
1719
DeclarationType.UserForm,
1820
};
1921

20-
public FolderHelper(RubberduckParserState state) => _state = state;
22+
public FolderHelper(RubberduckParserState state, IVBE vbe)
23+
{
24+
_state = state;
25+
_vbe = vbe;
26+
}
2127

2228
public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration = null)
2329
{
2430
var delimiter = GetDelimiter();
2531

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

2834
var items = declaration == null
2935
? _state.AllUserDeclarations.ToList()
@@ -46,7 +52,7 @@ public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration =
4652
var node = currentNode.Items.FirstOrDefault(i => i.Name == section);
4753
if (node == null)
4854
{
49-
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath, _state.ProjectsProvider);
55+
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath, _state.ProjectsProvider, _vbe);
5056
currentNode.AddChild(node);
5157
}
5258

Rubberduck.Core/Properties/Settings.Designer.cs

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rubberduck.Core/UI/Command/ReparseCommand.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@
99
using Rubberduck.Settings;
1010
using Rubberduck.SettingsProvider;
1111
using Rubberduck.Resources;
12-
using Rubberduck.UI.CodeExplorer.Commands;
1312
using Rubberduck.VBEditor.ComManagement.TypeLibsAPI;
1413
using Rubberduck.VBEditor.SafeComWrappers;
1514
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
16-
using Rubberduck.VBEditor.VBERuntime.Settings;
15+
using Rubberduck.VBEditor.VbeRuntime.Settings;
1716

1817
namespace Rubberduck.UI.Command
1918
{
@@ -22,12 +21,12 @@ public class ReparseCommand : CommandBase
2221
{
2322
private readonly IVBE _vbe;
2423
private readonly IVBETypeLibsAPI _typeLibApi;
25-
private readonly IVBESettings _vbeSettings;
24+
private readonly IVbeSettings _vbeSettings;
2625
private readonly IMessageBox _messageBox;
2726
private readonly RubberduckParserState _state;
2827
private readonly GeneralSettings _settings;
2928

30-
public ReparseCommand(IVBE vbe, IConfigProvider<GeneralSettings> settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IVBESettings vbeSettings, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger())
29+
public ReparseCommand(IVBE vbe, IConfigProvider<GeneralSettings> settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IVbeSettings vbeSettings, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger())
3130
{
3231
_vbe = vbe;
3332
_vbeSettings = vbeSettings;

Rubberduck.Core/UI/SelectionChangeService.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public SelectionChangeService(IVBE vbe, IParseCoordinator parser)
3030
{
3131
_parser = parser;
3232
_vbe = vbe;
33-
VBENativeServices.SelectionChanged += OnVbeSelectionChanged;
34-
VBENativeServices.WindowFocusChange += OnVbeFocusChanged;
33+
VbeNativeServices.SelectionChanged += OnVbeSelectionChanged;
34+
VbeNativeServices.WindowFocusChange += OnVbeFocusChanged;
3535
}
3636

3737
private void OnVbeSelectionChanged(object sender, EventArgs e)
@@ -69,7 +69,7 @@ private void OnVbeFocusChanged(object sender, WindowChangedEventArgs e)
6969
//Caret changed in a code pane.
7070
Task.Run(() =>
7171
{
72-
using (var pane = VBENativeServices.GetCodePaneFromHwnd(e.Hwnd))
72+
using (var pane = VbeNativeServices.GetCodePaneFromHwnd(e.Hwnd))
7373
{
7474
DispatchSelectedDeclaration(
7575
new DeclarationChangedEventArgs(_vbe, _parser.State.FindSelectedDeclaration(pane)));
@@ -186,8 +186,8 @@ private bool DeclarationChanged(Declaration current)
186186

187187
public void Dispose()
188188
{
189-
VBENativeServices.SelectionChanged -= OnVbeSelectionChanged;
190-
VBENativeServices.WindowFocusChange -= OnVbeFocusChanged;
189+
VbeNativeServices.SelectionChanged -= OnVbeSelectionChanged;
190+
VbeNativeServices.WindowFocusChange -= OnVbeFocusChanged;
191191
}
192192
}
193193

Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
using NLog;
99
using Rubberduck.SettingsProvider;
1010
using Rubberduck.UI.Command;
11-
using Rubberduck.VBEditor.VBERuntime.Settings;
11+
using Rubberduck.VBEditor.VbeRuntime.Settings;
1212
using Rubberduck.Resources;
1313

1414
namespace Rubberduck.UI.Settings
@@ -23,12 +23,12 @@ public class GeneralSettingsViewModel : SettingsViewModelBase, ISettingsViewMode
2323
{
2424
private readonly IOperatingSystem _operatingSystem;
2525
private readonly IMessageBox _messageBox;
26-
private readonly IVBESettings _vbeSettings;
26+
private readonly IVbeSettings _vbeSettings;
2727

2828
private bool _indenterPrompted;
2929
private readonly ReadOnlyCollection<Type> _experimentalFeatureTypes;
3030

31-
public GeneralSettingsViewModel(Configuration config, IOperatingSystem operatingSystem, IMessageBox messageBox, IVBESettings vbeSettings, IEnumerable<Type> experimentalFeatureTypes)
31+
public GeneralSettingsViewModel(Configuration config, IOperatingSystem operatingSystem, IMessageBox messageBox, IVbeSettings vbeSettings, IEnumerable<Type> experimentalFeatureTypes)
3232
{
3333
_operatingSystem = operatingSystem;
3434
_messageBox = messageBox;

0 commit comments

Comments
 (0)