Skip to content

Commit

Permalink
Merge pull request #3935 from mansellan/VB6-Final
Browse files Browse the repository at this point in the history
Introduces VB6 IDE Support
  • Loading branch information
retailcoder committed Apr 23, 2018
2 parents 14743dc + 4fd24a6 commit d24bf63
Show file tree
Hide file tree
Showing 197 changed files with 9,273 additions and 1,690 deletions.
14 changes: 9 additions & 5 deletions Rubberduck.API/API/VBA/ParserState.cs
Expand Up @@ -12,15 +12,17 @@
using Rubberduck.Parsing.UIContext;
using Rubberduck.VBEditor.ComManagement;
using Rubberduck.VBEditor.Events;
using Rubberduck.VBEditor.SafeComWrappers.VBA;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
using Rubberduck.VBEditor.Utility;

namespace Rubberduck.API.VBA
{
[ComVisible(true)]
public interface IParserState
{
void Initialize(Microsoft.Vbe.Interop.VBE vbe);
// vbe is the com coclass interface from the interop assembly.
// There is no shared interface between VBA and VB6 types, hence object.
void Initialize(object vbe);

void Parse();
void BeginParse();
Expand Down Expand Up @@ -51,7 +53,7 @@ public sealed class ParserState : IParserState, IDisposable
private RubberduckParserState _state;
private AttributeParser _attributeParser;
private ParseCoordinator _parser;
private VBE _vbe;
private IVBE _vbe;
private IVBEEvents _vbeEvents;
private readonly IUiDispatcher _dispatcher;

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

public void Initialize(Microsoft.Vbe.Interop.VBE vbe)
// vbe is the com coclass interface from the interop assembly.
// There is no shared interface between VBA and VB6 types, hence object.
public void Initialize(object vbe)
{
if (_parser != null)
{
throw new InvalidOperationException("ParserState is already initialized.");
}

_vbe = new VBE(vbe);
_vbe = RootComWrapperFactory.GetVbeWrapper(vbe);
_vbeEvents = VBEEvents.Initialize(_vbe);
var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory();
var projectRepository = new ProjectsRepository(_vbe);
Expand Down
14 changes: 0 additions & 14 deletions Rubberduck.API/Rubberduck.API.csproj
Expand Up @@ -31,20 +31,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VB6.Interop.VBIDE">
<HintPath>..\libs\Microsoft.VB6.Interop.VBIDE.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Vbe.Interop, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>False</EmbedInteropTypes>
<HintPath>..\libs\Microsoft.Vbe.Interop.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Vbe.Interop.Forms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>False</EmbedInteropTypes>
<HintPath>..\libs\Microsoft.Vbe.Interop.Forms.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="Microsoft.CSharp" />
Expand Down
6 changes: 3 additions & 3 deletions Rubberduck.Core/Common/KeyHookEventArgs.cs
@@ -1,6 +1,6 @@
using System;
using System.Windows.Forms;
using Microsoft.Vbe.Interop;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;

namespace Rubberduck.Common
{
Expand All @@ -9,13 +9,13 @@ namespace Rubberduck.Common
/// </summary>
public class KeyHookEventArgs : EventArgs
{
public KeyHookEventArgs(Keys key, VBComponent component)
public KeyHookEventArgs(Keys key, IVBComponent component)
{
Key = key;
Component = component;
}

public Keys Key { get; }
public VBComponent Component { get; }
public IVBComponent Component { get; }
}
}
38 changes: 38 additions & 0 deletions Rubberduck.Core/Common/RootComWrapperFactory.cs
@@ -0,0 +1,38 @@
using System.Collections.Generic;
using Rubberduck.VBEditor;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
using Rubberduck.VBEditor.SafeComWrappers.VB6;
using Rubberduck.VBEditor.SafeComWrappers.VBA;

namespace Rubberduck.Common
{
// Resolves SafeComWrapper providers from raw COM vbe and addin objects.
// We need these so early that IoC hasn't been set up yet.
// Using the Provider pattern to avoid outgoing dependencies to COM interop assemblies.
public static class RootComWrapperFactory
{
public static IVBE GetVbeWrapper(object vbeComObject)
{
var vbeProviders = new HashSet<ISafeComWrapperProvider<IVBE>>
{
new VB6VBEProvider(),
new VBAVBEProvider()
};
var factory = new VBEFactory(vbeProviders);

return factory.Create(vbeComObject);
}

public static IAddIn GetAddInWrapper(object addInComObject)
{
var addInProviders = new HashSet<ISafeComWrapperProvider<IAddIn>>
{
new VB6AddInProvider(),
new VBAAddInProvider()
};
var factory = new AddInFactory(addInProviders);

return factory.Create(addInComObject);
}
}
}
29 changes: 10 additions & 19 deletions Rubberduck.Core/Rubberduck.Core.csproj
Expand Up @@ -255,16 +255,6 @@
<HintPath>..\packages\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\Microsoft.Expression.Interactions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.VB6.Interop.VBIDE">
<HintPath>..\libs\Microsoft.VB6.Interop.VBIDE.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Vbe.Interop.Forms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>False</EmbedInteropTypes>
<HintPath>..\libs\Microsoft.Vbe.Interop.Forms.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
</Reference>
Expand Down Expand Up @@ -296,12 +286,6 @@
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
<Reference Include="Microsoft.Vbe.Interop">
<HintPath>..\libs\Microsoft.Vbe.Interop.dll</HintPath>
</Reference>
<Reference Include="office">
<HintPath>..\libs\Office.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="App.cs" />
Expand All @@ -321,6 +305,7 @@
<Compile Include="Common\IRubberduckHooks.cs" />
<Compile Include="Common\LogLevelHelper.cs" />
<Compile Include="Common\ModuleExporter.cs" />
<Compile Include="Common\RootComWrapperFactory.cs" />
<Compile Include="Common\StringExtensions.cs" />
<Compile Include="Common\VariableNameValidator.cs" />
<Compile Include="Common\WinAPI\RegistryAccess.cs" />
Expand Down Expand Up @@ -477,8 +462,6 @@
<Compile Include="UI\Command\MenuItems\CommandBars\RubberduckCommandBar.cs" />
<Compile Include="UI\Command\MenuItems\CommandBars\SerializeDeclarationsCommandMenuItem.cs" />
<Compile Include="UI\Command\MenuItems\CommandBars\ShowParserErrorsCommandMenuItem.cs" />
<Compile Include="UI\Command\MenuItems\ParentMenus\CommandBarButtonFactory.cs" />
<Compile Include="UI\Command\MenuItems\ParentMenus\CommandBarPopupFactory.cs" />
<Compile Include="UI\Command\MenuItems\CommandBars\IAppCommandBar.cs" />
<Compile Include="UI\Command\RegexAssistantCommand.cs" />
<Compile Include="UI\Command\MenuItems\RegexAssistantCommandMenuItem.cs" />
Expand Down Expand Up @@ -1209,8 +1192,8 @@
<Content Include="Resources\Custom\mit_license.txt" />
<Resource Include="Resources\folder-open.png" />
<Resource Include="Resources\folder.png" />
<None Include="Resources\RD-300x250-base.png" />
<Resource Include="Resources\magnifier-medium.png" />
<Resource Include="Resources\RD2018-Splash.png" />
<Content Include="Resources\Rubberduck\RD-AboutWindow.png" />
<Content Include="Resources\Rubberduck\RD-InstallBanner.bmp" />
<Content Include="Resources\Rubberduck\RD-InstallWindow.bmp" />
Expand Down Expand Up @@ -1276,6 +1259,14 @@
<Project>{B9C0BF22-4D8A-4BF4-89F9-E789C0063DEB}</Project>
<Name>Rubberduck.SmartIndenter</Name>
</ProjectReference>
<ProjectReference Include="..\Rubberduck.VBEditor.VB6\Rubberduck.VBEditor.VB6.csproj">
<Project>{5d683117-21f1-4a01-a0c7-6ae6f30a16a7}</Project>
<Name>Rubberduck.VBEditor.VB6</Name>
</ProjectReference>
<ProjectReference Include="..\Rubberduck.VBEditor.VBA\Rubberduck.VBEditor.VBA.csproj">
<Project>{d488071e-edcb-4601-b734-1a3109ed903c}</Project>
<Name>Rubberduck.VBEditor.VBA</Name>
</ProjectReference>
<ProjectReference Include="..\Rubberduck.VBEEditor\Rubberduck.VBEditor.csproj">
<Project>{8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0}</Project>
<Name>Rubberduck.VBEditor</Name>
Expand Down
5 changes: 2 additions & 3 deletions Rubberduck.Core/UI/Command/AddTestModuleCommand.cs
Expand Up @@ -7,7 +7,6 @@
using Rubberduck.UnitTesting;
using Rubberduck.VBEditor.SafeComWrappers;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
using Rubberduck.VBEditor.SafeComWrappers.VBA;
using System.Text;
using Rubberduck.Parsing.Symbols;
using System;
Expand Down Expand Up @@ -131,14 +130,14 @@ private IVBProject GetProject()
{
return projects.Count == 1
? projects[1] // because VBA-Side indexing
: new VBProject(null);
: null;
}
}

protected override bool EvaluateCanExecute(object parameter)
{
var project = GetProject();
return !project.IsWrappingNullReference && CanExecuteCode(project);
return project != null && !project.IsWrappingNullReference && CanExecuteCode(project);
}

private bool CanExecuteCode(IVBProject project)
Expand Down
2 changes: 1 addition & 1 deletion Rubberduck.Core/UI/Command/IMenuItem.cs
@@ -1,7 +1,7 @@
using System;
using System.Drawing;
using Rubberduck.Parsing.VBA;
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
using Rubberduck.VBEditor.SafeComWrappers;

namespace Rubberduck.UI.Command
{
Expand Down
Expand Up @@ -5,9 +5,8 @@
using NLog;
using Rubberduck.Parsing.UIContext;
using Rubberduck.Parsing.VBA;
using Rubberduck.UI.Command.MenuItems.ParentMenus;
using Rubberduck.VBEditor.SafeComWrappers.Office.Core;
using Rubberduck.VBEditor.SafeComWrappers.Office.Core.Abstract;
using Rubberduck.VBEditor.SafeComWrappers;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;

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

protected AppCommandBarBase(string name, CommandBarPosition position, IEnumerable<ICommandMenuItem> items, IUiDispatcher uiDispatcher, ICommandBarButtonFactory buttonFactory)
protected AppCommandBarBase(string name, CommandBarPosition position, IEnumerable<ICommandMenuItem> items, IUiDispatcher uiDispatcher)
{
_name = name;
_position = position;
_items = items.ToDictionary(item => item, item => null as ICommandBarControl);
_uiDispatcher = uiDispatcher;
_buttonFactory = buttonFactory;
}

protected ICommandMenuItem FindChildByTag(string tag)
Expand Down Expand Up @@ -122,7 +119,7 @@ private ICommandBarControl InitializeChildControl(ICommandMenuItem item)
ICommandBarButton child;
using (var controls = Item.Controls)
{
child = _buttonFactory.Create(controls);
child = controls.AddButton();
}
child.Style = item.ButtonStyle;
child.Picture = item.Image;
Expand Down
@@ -1,4 +1,5 @@
using Rubberduck.VBEditor.SafeComWrappers.Office.Core.Abstract;
using Rubberduck.VBEditor.SafeComWrappers;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;

namespace Rubberduck.UI.Command.MenuItems.CommandBars
{
Expand Down
@@ -1,7 +1,7 @@
using System;
using System.Drawing;
using Rubberduck.Properties;
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
using Rubberduck.VBEditor.SafeComWrappers;

namespace Rubberduck.UI.Command.MenuItems.CommandBars
{
Expand Down
Expand Up @@ -6,8 +6,7 @@
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.UIContext;
using Rubberduck.Parsing.VBA;
using Rubberduck.UI.Command.MenuItems.ParentMenus;
using Rubberduck.VBEditor.SafeComWrappers.Office.Core;
using Rubberduck.VBEditor.SafeComWrappers;

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

public RubberduckCommandBar(IParseCoordinator parser, IEnumerable<ICommandMenuItem> items, IContextFormatter formatter, ISelectionChangeService selectionService, IUiDispatcher uiDispatcher, ICommandBarButtonFactory buttonFactory)
: base("Rubberduck", CommandBarPosition.Top, items, uiDispatcher, buttonFactory)
public RubberduckCommandBar(IParseCoordinator parser, IEnumerable<ICommandMenuItem> items, IContextFormatter formatter, ISelectionChangeService selectionService, IUiDispatcher uiDispatcher)
: base("Rubberduck", CommandBarPosition.Top, items, uiDispatcher)
{
_parser = parser;
_formatter = formatter;
Expand Down
Expand Up @@ -2,7 +2,8 @@
using System.Drawing;
using Rubberduck.Parsing.VBA;
using Rubberduck.Properties;
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
using Rubberduck.VBEditor.SafeComWrappers;


namespace Rubberduck.UI.Command.MenuItems.CommandBars
{
Expand Down
Expand Up @@ -2,7 +2,7 @@
using System.Drawing;
using System.Globalization;
using Rubberduck.Parsing.VBA;
using Rubberduck.VBEditor.SafeComWrappers.MSForms;
using Rubberduck.VBEditor.SafeComWrappers;

namespace Rubberduck.UI.Command.MenuItems
{
Expand Down
Expand Up @@ -4,8 +4,8 @@ namespace Rubberduck.UI.Command.MenuItems.ParentMenus
{
public class CodePaneContextParentMenu : ParentMenuItemBase
{
public CodePaneContextParentMenu(ICommandBarButtonFactory buttonFactory, IEnumerable<IMenuItem> items, int beforeIndex)
: base(buttonFactory, "RubberduckMenu", items, beforeIndex)
public CodePaneContextParentMenu(IEnumerable<IMenuItem> items, int beforeIndex)
: base("RubberduckMenu", items, beforeIndex)
{
}

Expand Down

0 comments on commit d24bf63

Please sign in to comment.