Skip to content

Commit 2e7212a

Browse files
committed
make sure we only create OB when VS is running in IDE mode. all command line mode (and all its variations) we don't need to create OB
1 parent e8ca594 commit 2e7212a

File tree

4 files changed

+32
-31
lines changed

4 files changed

+32
-31
lines changed

src/VisualStudio/CSharp/Impl/CSharpPackage.cs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke
8585
await JoinableTaskFactory.SwitchToMainThreadAsync(ct);
8686
return new TempPECompilerService(this.Workspace.Services.GetService<IMetadataService>());
8787
});
88-
89-
await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(true);
9088
}
9189
catch (Exception e) when (FatalError.ReportUnlessCanceled(e))
9290
{
@@ -98,17 +96,7 @@ protected override VisualStudioWorkspaceImpl CreateWorkspace()
9896
return this.ComponentModel.GetService<VisualStudioWorkspaceImpl>();
9997
}
10098

101-
protected override void Dispose(bool disposing)
102-
{
103-
if (disposing)
104-
{
105-
JoinableTaskFactory.Run(() => UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None));
106-
}
107-
108-
base.Dispose(disposing);
109-
}
110-
111-
private async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
99+
protected override async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
112100
{
113101
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
114102

@@ -123,7 +111,7 @@ private async Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken ca
123111
}
124112
}
125113

126-
private async Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
114+
protected override async Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
127115
{
128116
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
129117

src/VisualStudio/Core/Def/Implementation/LanguageService/AbstractPackage`2.cs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke
9090

9191
// start remote host
9292
EnableRemoteHostClientService();
93+
94+
// not every derived package support object browser and for those languages
95+
// this is a no op
96+
await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(true);
9397
}
9498

9599
LoadComponentsInUIContextOnceSolutionFullyLoadedAsync(cancellationToken).Forget();
@@ -147,12 +151,17 @@ protected override void Dispose(bool disposing)
147151
_miscellaneousFilesWorkspace.StopSolutionCrawler();
148152
}
149153

150-
if (ThreadHelper.JoinableTaskFactory.Run(() => IsInIdeModeAsync(this.Workspace, CancellationToken.None)))
154+
ThreadHelper.JoinableTaskFactory.Run(async () =>
151155
{
152-
this.Workspace.StopSolutionCrawler();
156+
if (await IsInIdeModeAsync(this.Workspace, CancellationToken.None).ConfigureAwait(true))
157+
{
158+
this.Workspace.StopSolutionCrawler();
153159

154-
DisableRemoteHostClientService();
155-
}
160+
DisableRemoteHostClientService();
161+
162+
await UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None).ConfigureAwait(true);
163+
}
164+
});
156165

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

168177
protected abstract string RoslynLanguageName { get; }
169178

179+
protected virtual Task RegisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
180+
{
181+
// it is virtual rather than abstract to not break other languages which derived from our
182+
// base package implementations
183+
return Task.CompletedTask;
184+
}
185+
186+
protected virtual Task UnregisterObjectBrowserLibraryManagerAsync(CancellationToken cancellationToken)
187+
{
188+
// it is virtual rather than abstract to not break other languages which derived from our
189+
// base package implementations
190+
return Task.CompletedTask;
191+
}
192+
170193
private async Task<bool> IsInIdeModeAsync(Workspace workspace, CancellationToken cancellationToken)
171194
{
172195
return workspace != null && !await IsInCommandLineModeAsync(cancellationToken).ConfigureAwait(true);

src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpBuild.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static void Main(string[] args)
4646
// TODO: Validate build works as expected
4747
}
4848

49-
[WpfFact(Skip = "https://github.com/dotnet/roslyn/issues/18204"), Trait(Traits.Feature, Traits.Features.Build)]
49+
[WpfFact, Trait(Traits.Feature, Traits.Features.Build)]
5050
public void BuildWithCommandLine()
5151
{
5252
VisualStudio.SolutionExplorer.SaveAll();

src/VisualStudio/VisualBasic/Impl/LanguageService/VisualBasicPackage.vb

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,11 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic
9797
Await JoinableTaskFactory.SwitchToMainThreadAsync(ct)
9898
Return New TempPECompilerFactory(workspace)
9999
End Function)
100-
101-
Await RegisterObjectBrowserLibraryManagerAsync(cancellationToken).ConfigureAwait(True)
102100
Catch ex As Exception When FatalError.ReportUnlessCanceled(ex)
103101
End Try
104102
End Function
105103

106-
Protected Overrides Sub Dispose(disposing As Boolean)
107-
If disposing Then
108-
JoinableTaskFactory.Run(Function() UnregisterObjectBrowserLibraryManagerAsync(CancellationToken.None))
109-
End If
110-
111-
MyBase.Dispose(disposing)
112-
End Sub
113-
114-
Private Async Function RegisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
104+
Protected Overrides Async Function RegisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
115105
Await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken)
116106

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

127-
Private Async Function UnregisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
117+
Protected Overrides Async Function UnregisterObjectBrowserLibraryManagerAsync(cancellationToken As CancellationToken) As Task
128118
Await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken)
129119

130120
If _libraryManagerCookie <> 0 Then

0 commit comments

Comments
 (0)