Skip to content

Commit 0f1e89a

Browse files
committed
Closes #298
1 parent bb5c458 commit 0f1e89a

File tree

195 files changed

+9165
-1636
lines changed

Some content is hidden

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

195 files changed

+9165
-1636
lines changed

Rubberduck.API/API/VBA/ParserState.cs

+9-5
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
1212
using Rubberduck.Parsing.UIContext;
1313
using Rubberduck.VBEditor.ComManagement;
1414
using Rubberduck.VBEditor.Events;
15-
using Rubberduck.VBEditor.SafeComWrappers.VBA;
15+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1616
using Rubberduck.VBEditor.Utility;
1717

1818
namespace Rubberduck.API.VBA
1919
{
2020
[ComVisible(true)]
2121
public interface IParserState
2222
{
23-
void Initialize(Microsoft.Vbe.Interop.VBE vbe);
23+
// vbe is the com coclass interface from the interop assembly.
24+
// There is no shared interface between VBA and VB6 types, hence object.
25+
void Initialize(object vbe);
2426

2527
void Parse();
2628
void BeginParse();
@@ -51,7 +53,7 @@ public sealed class ParserState : IParserState, IDisposable
5153
private RubberduckParserState _state;
5254
private AttributeParser _attributeParser;
5355
private ParseCoordinator _parser;
54-
private VBE _vbe;
56+
private IVBE _vbe;
5557
private IVBEEvents _vbeEvents;
5658
private readonly IUiDispatcher _dispatcher;
5759

@@ -61,14 +63,16 @@ public ParserState()
6163
_dispatcher = new UiDispatcher(UiContextProvider.Instance());
6264
}
6365

64-
public void Initialize(Microsoft.Vbe.Interop.VBE vbe)
66+
// vbe is the com coclass interface from the interop assembly.
67+
// There is no shared interface between VBA and VB6 types, hence object.
68+
public void Initialize(object vbe)
6569
{
6670
if (_parser != null)
6771
{
6872
throw new InvalidOperationException("ParserState is already initialized.");
6973
}
7074

71-
_vbe = new VBE(vbe);
75+
_vbe = RootComWrapperFactory.GetVbeWrapper(vbe);
7276
_vbeEvents = VBEEvents.Initialize(_vbe);
7377
var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory();
7478
var projectRepository = new ProjectsRepository(_vbe);

Rubberduck.API/Rubberduck.API.csproj

-14
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,6 @@
3131
<WarningLevel>4</WarningLevel>
3232
</PropertyGroup>
3333
<ItemGroup>
34-
<Reference Include="Microsoft.VB6.Interop.VBIDE">
35-
<HintPath>..\libs\Microsoft.VB6.Interop.VBIDE.dll</HintPath>
36-
<EmbedInteropTypes>False</EmbedInteropTypes>
37-
</Reference>
38-
<Reference Include="Microsoft.Vbe.Interop, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
39-
<SpecificVersion>False</SpecificVersion>
40-
<EmbedInteropTypes>False</EmbedInteropTypes>
41-
<HintPath>..\libs\Microsoft.Vbe.Interop.dll</HintPath>
42-
</Reference>
43-
<Reference Include="Microsoft.Vbe.Interop.Forms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
44-
<SpecificVersion>False</SpecificVersion>
45-
<EmbedInteropTypes>False</EmbedInteropTypes>
46-
<HintPath>..\libs\Microsoft.Vbe.Interop.Forms.dll</HintPath>
47-
</Reference>
4834
<Reference Include="System" />
4935
<Reference Include="System.Core" />
5036
<Reference Include="Microsoft.CSharp" />
+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using System.Windows.Forms;
3-
using Microsoft.Vbe.Interop;
3+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
44

55
namespace Rubberduck.Common
66
{
@@ -9,13 +9,13 @@ namespace Rubberduck.Common
99
/// </summary>
1010
public class KeyHookEventArgs : EventArgs
1111
{
12-
public KeyHookEventArgs(Keys key, VBComponent component)
12+
public KeyHookEventArgs(Keys key, IVBComponent component)
1313
{
1414
Key = key;
1515
Component = component;
1616
}
1717

1818
public Keys Key { get; }
19-
public VBComponent Component { get; }
19+
public IVBComponent Component { get; }
2020
}
2121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.Collections.Generic;
2+
using Rubberduck.VBEditor;
3+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
4+
using Rubberduck.VBEditor.SafeComWrappers.VB6;
5+
using Rubberduck.VBEditor.SafeComWrappers.VBA;
6+
7+
namespace Rubberduck.Common
8+
{
9+
// Resolves SafeComWrapper providers from raw COM vbe and addin objects.
10+
// We need these so early that IoC hasn't been set up yet.
11+
// Using the Provider pattern to avoid outgoing dependencies to COM interop assemblies.
12+
public static class RootComWrapperFactory
13+
{
14+
public static IVBE GetVbeWrapper(object vbeComObject)
15+
{
16+
var vbeProviders = new HashSet<ISafeComWrapperProvider<IVBE>>
17+
{
18+
new VB6VBEProvider(),
19+
new VBAVBEProvider()
20+
};
21+
var factory = new VBEFactory(vbeProviders);
22+
23+
return factory.Create(vbeComObject);
24+
}
25+
26+
public static IAddIn GetAddInWrapper(object addInComObject)
27+
{
28+
var addInProviders = new HashSet<ISafeComWrapperProvider<IAddIn>>
29+
{
30+
new VB6AddInProvider(),
31+
new VBAAddInProvider()
32+
};
33+
var factory = new AddInFactory(addInProviders);
34+
35+
return factory.Create(addInComObject);
36+
}
37+
}
38+
}

Rubberduck.Core/Rubberduck.Core.csproj

+10-19
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,6 @@
255255
<HintPath>..\packages\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\Microsoft.Expression.Interactions.dll</HintPath>
256256
<Private>True</Private>
257257
</Reference>
258-
<Reference Include="Microsoft.VB6.Interop.VBIDE">
259-
<HintPath>..\libs\Microsoft.VB6.Interop.VBIDE.dll</HintPath>
260-
<EmbedInteropTypes>False</EmbedInteropTypes>
261-
</Reference>
262-
<Reference Include="Microsoft.Vbe.Interop.Forms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
263-
<SpecificVersion>False</SpecificVersion>
264-
<EmbedInteropTypes>False</EmbedInteropTypes>
265-
<HintPath>..\libs\Microsoft.Vbe.Interop.Forms.dll</HintPath>
266-
<Private>True</Private>
267-
</Reference>
268258
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
269259
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
270260
</Reference>
@@ -296,12 +286,6 @@
296286
<Reference Include="System.Xml" />
297287
<Reference Include="WindowsBase" />
298288
<Reference Include="WindowsFormsIntegration" />
299-
<Reference Include="Microsoft.Vbe.Interop">
300-
<HintPath>..\libs\Microsoft.Vbe.Interop.dll</HintPath>
301-
</Reference>
302-
<Reference Include="office">
303-
<HintPath>..\libs\Office.dll</HintPath>
304-
</Reference>
305289
</ItemGroup>
306290
<ItemGroup>
307291
<Compile Include="App.cs" />
@@ -321,6 +305,7 @@
321305
<Compile Include="Common\IRubberduckHooks.cs" />
322306
<Compile Include="Common\LogLevelHelper.cs" />
323307
<Compile Include="Common\ModuleExporter.cs" />
308+
<Compile Include="Common\RootComWrapperFactory.cs" />
324309
<Compile Include="Common\StringExtensions.cs" />
325310
<Compile Include="Common\VariableNameValidator.cs" />
326311
<Compile Include="Common\WinAPI\RegistryAccess.cs" />
@@ -477,8 +462,6 @@
477462
<Compile Include="UI\Command\MenuItems\CommandBars\RubberduckCommandBar.cs" />
478463
<Compile Include="UI\Command\MenuItems\CommandBars\SerializeDeclarationsCommandMenuItem.cs" />
479464
<Compile Include="UI\Command\MenuItems\CommandBars\ShowParserErrorsCommandMenuItem.cs" />
480-
<Compile Include="UI\Command\MenuItems\ParentMenus\CommandBarButtonFactory.cs" />
481-
<Compile Include="UI\Command\MenuItems\ParentMenus\CommandBarPopupFactory.cs" />
482465
<Compile Include="UI\Command\MenuItems\CommandBars\IAppCommandBar.cs" />
483466
<Compile Include="UI\Command\RegexAssistantCommand.cs" />
484467
<Compile Include="UI\Command\MenuItems\RegexAssistantCommandMenuItem.cs" />
@@ -1209,8 +1192,8 @@
12091192
<Content Include="Resources\Custom\mit_license.txt" />
12101193
<Resource Include="Resources\folder-open.png" />
12111194
<Resource Include="Resources\folder.png" />
1195+
<None Include="Resources\RD-300x250-base.png" />
12121196
<Resource Include="Resources\magnifier-medium.png" />
1213-
<Resource Include="Resources\RD2018-Splash.png" />
12141197
<Content Include="Resources\Rubberduck\RD-AboutWindow.png" />
12151198
<Content Include="Resources\Rubberduck\RD-InstallBanner.bmp" />
12161199
<Content Include="Resources\Rubberduck\RD-InstallWindow.bmp" />
@@ -1276,6 +1259,14 @@
12761259
<Project>{B9C0BF22-4D8A-4BF4-89F9-E789C0063DEB}</Project>
12771260
<Name>Rubberduck.SmartIndenter</Name>
12781261
</ProjectReference>
1262+
<ProjectReference Include="..\Rubberduck.VBEditor.VB6\Rubberduck.VBEditor.VB6.csproj">
1263+
<Project>{5d683117-21f1-4a01-a0c7-6ae6f30a16a7}</Project>
1264+
<Name>Rubberduck.VBEditor.VB6</Name>
1265+
</ProjectReference>
1266+
<ProjectReference Include="..\Rubberduck.VBEditor.VBA\Rubberduck.VBEditor.VBA.csproj">
1267+
<Project>{d488071e-edcb-4601-b734-1a3109ed903c}</Project>
1268+
<Name>Rubberduck.VBEditor.VBA</Name>
1269+
</ProjectReference>
12791270
<ProjectReference Include="..\Rubberduck.VBEEditor\Rubberduck.VBEditor.csproj">
12801271
<Project>{8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0}</Project>
12811272
<Name>Rubberduck.VBEditor</Name>

Rubberduck.Core/UI/Command/AddTestModuleCommand.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using Rubberduck.UnitTesting;
88
using Rubberduck.VBEditor.SafeComWrappers;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10-
using Rubberduck.VBEditor.SafeComWrappers.VBA;
1110
using System.Text;
1211
using Rubberduck.Parsing.Symbols;
1312
using System;
@@ -131,14 +130,14 @@ private IVBProject GetProject()
131130
{
132131
return projects.Count == 1
133132
? projects[1] // because VBA-Side indexing
134-
: new VBProject(null);
133+
: null;
135134
}
136135
}
137136

138137
protected override bool EvaluateCanExecute(object parameter)
139138
{
140139
var project = GetProject();
141-
return !project.IsWrappingNullReference && CanExecuteCode(project);
140+
return project != null && !project.IsWrappingNullReference && CanExecuteCode(project);
142141
}
143142

144143
private bool CanExecuteCode(IVBProject project)

Rubberduck.Core/UI/Command/IMenuItem.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Drawing;
33
using Rubberduck.Parsing.VBA;
4-
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
4+
using Rubberduck.VBEditor.SafeComWrappers;
55

66
namespace Rubberduck.UI.Command
77
{

Rubberduck.Core/UI/Command/MenuItems/CommandBars/AppCommandBarBase.cs

+4-7
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
using NLog;
66
using Rubberduck.Parsing.UIContext;
77
using Rubberduck.Parsing.VBA;
8-
using Rubberduck.UI.Command.MenuItems.ParentMenus;
9-
using Rubberduck.VBEditor.SafeComWrappers.Office.Core;
10-
using Rubberduck.VBEditor.SafeComWrappers.Office.Core.Abstract;
8+
using Rubberduck.VBEditor.SafeComWrappers;
9+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1110

1211
namespace Rubberduck.UI.Command.MenuItems.CommandBars
1312
{
@@ -16,17 +15,15 @@ public abstract class AppCommandBarBase : IAppCommandBar
1615
private readonly string _name;
1716
private readonly CommandBarPosition _position;
1817
private readonly IDictionary<ICommandMenuItem, ICommandBarControl> _items;
19-
private readonly ICommandBarButtonFactory _buttonFactory;
2018
protected readonly IUiDispatcher _uiDispatcher;
2119
protected static readonly Logger Logger = LogManager.GetCurrentClassLogger();
2220

23-
protected AppCommandBarBase(string name, CommandBarPosition position, IEnumerable<ICommandMenuItem> items, IUiDispatcher uiDispatcher, ICommandBarButtonFactory buttonFactory)
21+
protected AppCommandBarBase(string name, CommandBarPosition position, IEnumerable<ICommandMenuItem> items, IUiDispatcher uiDispatcher)
2422
{
2523
_name = name;
2624
_position = position;
2725
_items = items.ToDictionary(item => item, item => null as ICommandBarControl);
2826
_uiDispatcher = uiDispatcher;
29-
_buttonFactory = buttonFactory;
3027
}
3128

3229
protected ICommandMenuItem FindChildByTag(string tag)
@@ -122,7 +119,7 @@ private ICommandBarControl InitializeChildControl(ICommandMenuItem item)
122119
ICommandBarButton child;
123120
using (var controls = Item.Controls)
124121
{
125-
child = _buttonFactory.Create(controls);
122+
child = controls.AddButton();
126123
}
127124
child.Style = item.ButtonStyle;
128125
child.Picture = item.Image;

Rubberduck.Core/UI/Command/MenuItems/CommandBars/IAppCommandBar.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Rubberduck.VBEditor.SafeComWrappers.Office.Core.Abstract;
1+
using Rubberduck.VBEditor.SafeComWrappers;
2+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
23

34
namespace Rubberduck.UI.Command.MenuItems.CommandBars
45
{

Rubberduck.Core/UI/Command/MenuItems/CommandBars/ReparseCommandMenuItem.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Drawing;
33
using Rubberduck.Properties;
4-
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
4+
using Rubberduck.VBEditor.SafeComWrappers;
55

66
namespace Rubberduck.UI.Command.MenuItems.CommandBars
77
{

Rubberduck.Core/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
using Rubberduck.Parsing.Symbols;
77
using Rubberduck.Parsing.UIContext;
88
using Rubberduck.Parsing.VBA;
9-
using Rubberduck.UI.Command.MenuItems.ParentMenus;
10-
using Rubberduck.VBEditor.SafeComWrappers.Office.Core;
9+
using Rubberduck.VBEditor.SafeComWrappers;
1110

1211
namespace Rubberduck.UI.Command.MenuItems.CommandBars
1312
{
@@ -17,8 +16,8 @@ public class RubberduckCommandBar : AppCommandBarBase, IDisposable
1716
private readonly IParseCoordinator _parser;
1817
private readonly ISelectionChangeService _selectionService;
1918

20-
public RubberduckCommandBar(IParseCoordinator parser, IEnumerable<ICommandMenuItem> items, IContextFormatter formatter, ISelectionChangeService selectionService, IUiDispatcher uiDispatcher, ICommandBarButtonFactory buttonFactory)
21-
: base("Rubberduck", CommandBarPosition.Top, items, uiDispatcher, buttonFactory)
19+
public RubberduckCommandBar(IParseCoordinator parser, IEnumerable<ICommandMenuItem> items, IContextFormatter formatter, ISelectionChangeService selectionService, IUiDispatcher uiDispatcher)
20+
: base("Rubberduck", CommandBarPosition.Top, items, uiDispatcher)
2221
{
2322
_parser = parser;
2423
_formatter = formatter;

Rubberduck.Core/UI/Command/MenuItems/CommandBars/ShowParserErrorsCommandMenuItem.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
using System.Drawing;
33
using Rubberduck.Parsing.VBA;
44
using Rubberduck.Properties;
5-
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
5+
using Rubberduck.VBEditor.SafeComWrappers;
6+
67

78
namespace Rubberduck.UI.Command.MenuItems.CommandBars
89
{

Rubberduck.Core/UI/Command/MenuItems/CommandMenuItemBase.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Drawing;
33
using System.Globalization;
44
using Rubberduck.Parsing.VBA;
5-
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
5+
using Rubberduck.VBEditor.SafeComWrappers;
66

77
namespace Rubberduck.UI.Command.MenuItems
88
{

Rubberduck.Core/UI/Command/MenuItems/ParentMenus/CodePaneContextParentMenu.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Rubberduck.UI.Command.MenuItems.ParentMenus
44
{
55
public class CodePaneContextParentMenu : ParentMenuItemBase
66
{
7-
public CodePaneContextParentMenu(ICommandBarButtonFactory buttonFactory, IEnumerable<IMenuItem> items, int beforeIndex)
8-
: base(buttonFactory, "RubberduckMenu", items, beforeIndex)
7+
public CodePaneContextParentMenu(IEnumerable<IMenuItem> items, int beforeIndex)
8+
: base("RubberduckMenu", items, beforeIndex)
99
{
1010
}
1111

0 commit comments

Comments
 (0)