Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 01bbc84

Browse files
committed
Make InlineReviewsPackage async.
Fixes #1489.
1 parent b3591bd commit 01bbc84

File tree

5 files changed

+33
-21
lines changed

5 files changed

+33
-21
lines changed

src/GitHub.InlineReviews/Commands/IPackageResource.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.ComponentModel.Design;
23

34
namespace GitHub.InlineReviews.Commands
45
{
@@ -11,10 +12,11 @@ public interface IPackageResource
1112
/// Registers the resource with a package.
1213
/// </summary>
1314
/// <param name="package">The package registering the resource.</param>
15+
/// <param name="menuService">The menu service to register against.</param>
1416
/// <remarks>
1517
/// This method should not be called directly, instead packages should call
1618
/// <see cref="PackageResources.Register{TPackage}(TPackage)"/> on initialization.
1719
/// </remarks>
18-
void Register(IServiceProvider package);
20+
void Register(IServiceProvider package, IMenuCommandService menuService);
1921
}
2022
}

src/GitHub.InlineReviews/Commands/PackageResources.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
2-
using GitHub.Extensions;
3-
using GitHub.Services;
2+
using System.ComponentModel.Composition.Hosting;
3+
using System.ComponentModel.Design;
44
using Microsoft.VisualStudio.Shell;
55

66
namespace GitHub.InlineReviews.Commands
@@ -12,18 +12,21 @@ static class PackageResources
1212
/// </summary>
1313
/// <typeparam name="TPackage">The type of the package.</typeparam>
1414
/// <param name="package">The package.</param>
15-
public static void Register<TPackage>(TPackage package) where TPackage : Package
15+
public static void Register<TPackage>(
16+
TPackage package,
17+
ExportProvider exportProvider,
18+
IMenuCommandService menuService)
19+
where TPackage : Package
1620
{
17-
var serviceProvider = package.GetServiceSafe<IGitHubServiceProvider>();
18-
var commands = serviceProvider?.ExportProvider?.GetExports<IPackageResource, IExportCommandMetadata>();
21+
var commands = exportProvider.GetExports<IPackageResource, IExportCommandMetadata>();
1922

2023
if (commands != null)
2124
{
2225
foreach (var command in commands)
2326
{
2427
if (command.Metadata.PackageType == typeof(TPackage))
2528
{
26-
command.Value.Register(package);
29+
command.Value.Register(package, menuService);
2730
}
2831
}
2932
}

src/GitHub.InlineReviews/Commands/VsCommand.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.ComponentModel.Design;
23
using System.Windows.Input;
34
using GitHub.Extensions;
45
using Microsoft.VisualStudio.Shell;
@@ -37,14 +38,14 @@ protected VsCommand(Guid commandSet, int commandId)
3738
}
3839

3940
/// <inheritdoc/>
40-
public override void Register(IServiceProvider package)
41+
public override void Register(IServiceProvider package, IMenuCommandService menuService)
4142
{
4243
var command = new OleMenuCommand(
4344
(s, e) => Execute().Forget(),
4445
(s, e) => { },
4546
(s, e) => BeforeQueryStatus((OleMenuCommand)s),
4647
VsCommandID);
47-
Register(package, command);
48+
Register(package, menuService, command);
4849
}
4950

5051
/// <summary>
@@ -88,14 +89,14 @@ protected VsCommand(Guid commandSet, int commandId)
8889
}
8990

9091
/// <inheritdoc/>
91-
public override void Register(IServiceProvider package)
92+
public override void Register(IServiceProvider package, IMenuCommandService menuService)
9293
{
9394
var command = new OleMenuCommand(
9495
(s, e) => Execute((TParam)((OleMenuCmdEventArgs)e).InValue).Forget(),
9596
(s, e) => { },
9697
(s, e) => BeforeQueryStatus((OleMenuCommand)s),
9798
VsCommandID);
98-
Register(package, command);
99+
Register(package, menuService, command);
99100
}
100101

101102
/// <summary>

src/GitHub.InlineReviews/Commands/VsCommandBase.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void ICommand.Execute(object parameter)
5252
}
5353

5454
/// <inheritdoc/>
55-
public abstract void Register(IServiceProvider package);
55+
public abstract void Register(IServiceProvider package, IMenuCommandService menuService);
5656

5757
/// <summary>
5858
/// Gets the package that registered the command.
@@ -86,12 +86,10 @@ protected void BeforeQueryStatus(MenuCommand command)
8686
/// </summary>
8787
/// <param name="package">The package.</param>
8888
/// <param name="command">The command.</param>
89-
protected void Register(IServiceProvider package, MenuCommand command)
89+
protected void Register(IServiceProvider package, IMenuCommandService menuService, MenuCommand command)
9090
{
9191
Package = package;
92-
var serviceProvider = (IServiceProvider)package;
93-
var mcs = (IMenuCommandService)serviceProvider.GetService(typeof(IMenuCommandService));
94-
mcs?.AddCommand(command);
92+
menuService.AddCommand(command);
9593
}
9694
}
9795
}
Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
using System;
2+
using System.ComponentModel.Design;
23
using System.Runtime.InteropServices;
4+
using System.Threading;
35
using GitHub.InlineReviews.Commands;
46
using GitHub.InlineReviews.Views;
57
using GitHub.VisualStudio;
8+
using Microsoft.VisualStudio.ComponentModelHost;
69
using Microsoft.VisualStudio.Shell;
710
using Microsoft.VisualStudio.Shell.Interop;
11+
using Task = System.Threading.Tasks.Task;
812

913
namespace GitHub.InlineReviews
1014
{
11-
[PackageRegistration(UseManagedResourcesOnly = true)]
15+
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
1216
[Guid(Guids.InlineReviewsPackageId)]
1317
[ProvideAutoLoad(UIContextGuids80.SolutionExists)]
1418
[ProvideMenuResource("Menus.ctmenu", 1)]
1519
[ProvideToolWindow(typeof(PullRequestCommentsPane), DocumentLikeTool=true)]
16-
public class InlineReviewsPackage : Package
20+
public class InlineReviewsPackage : AsyncPackage
1721
{
18-
protected override void Initialize()
22+
protected override async Task InitializeAsync(
23+
CancellationToken cancellationToken,
24+
IProgress<ServiceProgressData> progress)
1925
{
20-
base.Initialize();
21-
PackageResources.Register(this);
26+
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
27+
var menuService = (IMenuCommandService)(await GetServiceAsync(typeof(IMenuCommandService)));
28+
var componentModel = (IComponentModel)(await GetServiceAsync(typeof(SComponentModel)));
29+
PackageResources.Register(this, componentModel.DefaultExportProvider, menuService);
2230
}
2331
}
2432
}

0 commit comments

Comments
 (0)