Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 2 additions & 14 deletions src/VisualStudio/CSharp/Impl/CSharpPackage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke
await JoinableTaskFactory.SwitchToMainThreadAsync(ct);
return new TempPECompilerService(this.Workspace.Services.GetService<IMetadataService>());
});

await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(true);
}
catch (Exception e) when (FatalError.ReportUnlessCanceled(e))
{
Expand All @@ -98,17 +96,7 @@ protected override VisualStudioWorkspaceImpl CreateWorkspace()
return this.ComponentModel.GetService<VisualStudioWorkspaceImpl>();
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
JoinableTaskFactory.Run(() => UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None));
}

base.Dispose(disposing);
}

private async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
protected override async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

Expand All @@ -123,7 +111,7 @@ private async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken ca
}
}

private async Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
protected override async Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke

// start remote host
EnableRemoteHostClientService();

// not every derived package support object browser and for those languages
// this is a no op
await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(true);
}

LoadComponentsInUIContextOnceSolutionFullyLoadedAsync(cancellationToken).Forget();
Expand Down Expand Up @@ -147,12 +151,17 @@ protected override void Dispose(bool disposing)
_miscellaneousFilesWorkspace.StopSolutionCrawler();
}

if (ThreadHelper.JoinableTaskFactory.Run(() => IsInIdeModeAsync(this.Workspace, CancellationToken.None)))
ThreadHelper.JoinableTaskFactory.Run(async () =>
{
this.Workspace.StopSolutionCrawler();
if (await IsInIdeModeAsync(this.Workspace, CancellationToken.None).ConfigureAwait(true))
{
this.Workspace.StopSolutionCrawler();

DisableRemoteHostClientService();
}
DisableRemoteHostClientService();

await UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None).ConfigureAwait(true);
}
});

// If we've created the language service then tell it it's time to clean itself up now.
if (_languageService != null)
Expand All @@ -167,6 +176,20 @@ protected override void Dispose(bool disposing)

protected abstract string RoslynLanguageName { get; }

protected virtual Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
{
// it is virtual rather than abstract to not break other languages which derived from our
// base package implementations
return Task.CompletedTask;
}

protected virtual Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
{
// it is virtual rather than abstract to not break other languages which derived from our
// base package implementations
return Task.CompletedTask;
}

private async Task<bool> IsInIdeModeAsync(Workspace workspace, CancellationToken cancellationToken)
{
return workspace != null && !await IsInCommandLineModeAsync(cancellationToken).ConfigureAwait(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ static void Main(string[] args)
// TODO: Validate build works as expected
}

[WpfFact(Skip = "https://github.com/dotnet/roslyn/issues/18204"), Trait(Traits.Feature, Traits.Features.Build)]
[WpfFact, Trait(Traits.Feature, Traits.Features.Build)]
public void BuildWithCommandLine()
{
VisualStudio.SolutionExplorer.SaveAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,21 +97,11 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic
Await JoinableTaskFactory.SwitchToMainThreadAsync(ct)
Return New TempPECompilerFactory(workspace)
End Function)

Await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(True)
Catch ex As Exception When FatalError.ReportUnlessCanceled(ex)
End Try
End Function

Protected Overrides Sub Dispose(disposing As Boolean)
If disposing Then
JoinableTaskFactory.Run(Function() UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None))
End If

MyBase.Dispose(disposing)
End Sub

Private Async Function RegisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
Protected Overrides Async Function RegisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
Await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken)

Dim objectManager = TryCast(Await GetServiceAsync(GetType(SVsObjectManager)).ConfigureAwait(True), IVsObjectManager2)
Expand All @@ -124,7 +114,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic
End If
End Function

Private Async Function UnregisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
Protected Overrides Async Function UnregisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
Await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken)

If _libraryManagerCookie <> 0 Then
Expand Down