diff --git a/src/EditorFeatures/Core/Remote/SolutionChecksumUpdater.cs b/src/EditorFeatures/Core/Remote/SolutionChecksumUpdater.cs index 033c8a6db585a..af652ffedf2e0 100644 --- a/src/EditorFeatures/Core/Remote/SolutionChecksumUpdater.cs +++ b/src/EditorFeatures/Core/Remote/SolutionChecksumUpdater.cs @@ -25,12 +25,6 @@ internal sealed class SolutionChecksumUpdater { private readonly Workspace _workspace; - /// - /// We're not at a layer where we are guaranteed to have an IGlobalOperationNotificationService. So allow for - /// it being null. - /// - private readonly IGlobalOperationNotificationService? _globalOperationService; - private readonly IDocumentTrackingService _documentTrackingService; /// @@ -54,8 +48,6 @@ internal sealed class SolutionChecksumUpdater private const string SynchronizeTextChangesStatusSucceededKeyName = nameof(SolutionChecksumUpdater) + "." + SynchronizeTextChangesStatusSucceededMetricName; private const string SynchronizeTextChangesStatusFailedKeyName = nameof(SolutionChecksumUpdater) + "." + SynchronizeTextChangesStatusFailedMetricName; - private bool _isSynchronizeWorkspacePaused; - public SolutionChecksumUpdater( Workspace workspace, IAsynchronousOperationListenerProvider listenerProvider, @@ -63,8 +55,6 @@ public SolutionChecksumUpdater( { var listener = listenerProvider.GetListener(FeatureAttribute.SolutionChecksumUpdater); - _globalOperationService = workspace.Services.SolutionServices.ExportProvider.GetExports().FirstOrDefault()?.Value; - _workspace = workspace; _documentTrackingService = workspace.Services.GetRequiredService(); @@ -87,12 +77,6 @@ public SolutionChecksumUpdater( _workspaceChangedImmediateDisposer = _workspace.RegisterWorkspaceChangedImmediateHandler(OnWorkspaceChangedImmediate); _documentTrackingService.ActiveDocumentChanged += OnActiveDocumentChanged; - if (_globalOperationService != null) - { - _globalOperationService.Started += OnGlobalOperationStarted; - _globalOperationService.Stopped += OnGlobalOperationStopped; - } - // Enqueue the work to sync the initial data over. _synchronizeActiveDocumentQueue.AddWork(); _synchronizeWorkspaceQueue.AddWork(); @@ -101,53 +85,21 @@ public SolutionChecksumUpdater( public void Shutdown() { // Try to stop any work that is in progress. - PauseSynchronizingPrimaryWorkspace(); - - _documentTrackingService.ActiveDocumentChanged -= OnActiveDocumentChanged; - _workspaceChangedDisposer.Dispose(); - _workspaceChangedImmediateDisposer.Dispose(); - - if (_globalOperationService != null) - { - _globalOperationService.Started -= OnGlobalOperationStarted; - _globalOperationService.Stopped -= OnGlobalOperationStopped; - } - } - - private void OnGlobalOperationStarted(object? sender, EventArgs e) - => PauseSynchronizingPrimaryWorkspace(); - - private void OnGlobalOperationStopped(object? sender, EventArgs e) - => ResumeSynchronizingPrimaryWorkspace(); - - private void PauseSynchronizingPrimaryWorkspace() - { - // An expensive global operation started (like a build). Pause ourselves and cancel any outstanding work in - // progress to synchronize the solution. lock (_gate) { _synchronizeWorkspaceQueue.CancelExistingWork(); - _isSynchronizeWorkspacePaused = true; } - } - private void ResumeSynchronizingPrimaryWorkspace() - { - lock (_gate) - { - _isSynchronizeWorkspacePaused = false; - _synchronizeWorkspaceQueue.AddWork(); - } + _documentTrackingService.ActiveDocumentChanged -= OnActiveDocumentChanged; + _workspaceChangedDisposer.Dispose(); + _workspaceChangedImmediateDisposer.Dispose(); } private void OnWorkspaceChanged(WorkspaceChangeEventArgs _) { - // Check if we're currently paused. If so ignore this notification. We don't want to any work in response - // to whatever the workspace is doing. lock (_gate) { - if (!_isSynchronizeWorkspacePaused) - _synchronizeWorkspaceQueue.AddWork(); + _synchronizeWorkspaceQueue.AddWork(); } } diff --git a/src/EditorFeatures/TestUtilities/EditorTestCompositions.cs b/src/EditorFeatures/TestUtilities/EditorTestCompositions.cs index 2fdf5a8f5cc45..f000aae87914f 100644 --- a/src/EditorFeatures/TestUtilities/EditorTestCompositions.cs +++ b/src/EditorFeatures/TestUtilities/EditorTestCompositions.cs @@ -7,7 +7,6 @@ using Microsoft.CodeAnalysis.Editor.Implementation.Notification; using Microsoft.CodeAnalysis.LanguageServer; using Microsoft.CodeAnalysis.Test.Utilities; -using Microsoft.CodeAnalysis.Test.Utilities.Notification; using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.UnitTests.Fakes; using Microsoft.CodeAnalysis.UnitTests.Remote; @@ -57,7 +56,6 @@ public static class EditorTestCompositions typeof(TestObscuringTipManager)); // TODO: https://devdiv.visualstudio.com/DevDiv/_workitems?id=544569 public static readonly TestComposition EditorFeatures = FeaturesTestCompositions.Features - .AddParts(typeof(TestGlobalOperationNotificationService)) .Add(Editor) .AddAssemblies( typeof(TextEditorResources).Assembly, diff --git a/src/EditorFeatures/TestUtilities/Notification/TestGlobalOperationNotificationService.cs b/src/EditorFeatures/TestUtilities/Notification/TestGlobalOperationNotificationService.cs deleted file mode 100644 index d0b89fb4cdd71..0000000000000 --- a/src/EditorFeatures/TestUtilities/Notification/TestGlobalOperationNotificationService.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Composition; -using System.Threading; -using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.Notification; -using Microsoft.CodeAnalysis.Shared.TestHooks; -using Microsoft.VisualStudio.Composition; - -namespace Microsoft.CodeAnalysis.Test.Utilities.Notification; - -[Export(typeof(IGlobalOperationNotificationService)), PartNotDiscoverable, Shared] -[method: ImportingConstructor] -[method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] -internal sealed class TestGlobalOperationNotificationService( - IAsynchronousOperationListenerProvider listenerProvider) - : AbstractGlobalOperationNotificationService(listenerProvider, CancellationToken.None); diff --git a/src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs similarity index 88% rename from src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs rename to src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs index 834def7386a04..4dcd7ed20151d 100644 --- a/src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.GlobalOperationRegistration.cs @@ -4,7 +4,7 @@ using System; -namespace Microsoft.CodeAnalysis.Notification; +namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; internal partial class AbstractGlobalOperationNotificationService { diff --git a/src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs similarity index 97% rename from src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.cs rename to src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs index c8a88b0ac843d..7db4b6d79c0a3 100644 --- a/src/Workspaces/Core/Portable/Notification/AbstractGlobalOperationNotificationService.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs @@ -11,7 +11,7 @@ using Microsoft.CodeAnalysis.Threading; using Roslyn.Utilities; -namespace Microsoft.CodeAnalysis.Notification; +namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; internal abstract partial class AbstractGlobalOperationNotificationService : IGlobalOperationNotificationService { diff --git a/src/Workspaces/Core/Portable/Notification/IGlobalOperationNotificationService.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/IGlobalOperationNotificationService.cs similarity index 91% rename from src/Workspaces/Core/Portable/Notification/IGlobalOperationNotificationService.cs rename to src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/IGlobalOperationNotificationService.cs index 8e0e83c30ff95..9b3b4b165c15f 100644 --- a/src/Workspaces/Core/Portable/Notification/IGlobalOperationNotificationService.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/IGlobalOperationNotificationService.cs @@ -4,7 +4,7 @@ using System; -namespace Microsoft.CodeAnalysis.Notification; +namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; /// /// Optional interface that can be used to hear about when expensive global operations (like a 'build') occur in the diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingGlobalOperationAwareIdleProcessor.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingGlobalOperationAwareIdleProcessor.cs index 239d19b5815d1..e87a2e6c9fac6 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingGlobalOperationAwareIdleProcessor.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingGlobalOperationAwareIdleProcessor.cs @@ -4,7 +4,7 @@ using System; using System.Threading; -using Microsoft.CodeAnalysis.Notification; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Shared.TestHooks; namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.SolutionCrawler; diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.AbstractUnitTestingPriorityProcessor.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.AbstractUnitTestingPriorityProcessor.cs index 826660ba0a116..3448fa733e8a1 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.AbstractUnitTestingPriorityProcessor.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.AbstractUnitTestingPriorityProcessor.cs @@ -6,8 +6,8 @@ using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Internal.Log; -using Microsoft.CodeAnalysis.Notification; using Microsoft.CodeAnalysis.Shared.TestHooks; namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.SolutionCrawler; diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingIncrementalAnalyzerProcessor.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingIncrementalAnalyzerProcessor.cs index c53d53d313e8e..fa947bf994373 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingIncrementalAnalyzerProcessor.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingIncrementalAnalyzerProcessor.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Microsoft.CodeAnalysis.ErrorReporting; using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Api; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Internal.Log; using Microsoft.CodeAnalysis.LanguageService; diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingLowPriorityProcessor.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingLowPriorityProcessor.cs index 4d63273c453cd..ad2226f356bf8 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingLowPriorityProcessor.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingLowPriorityProcessor.cs @@ -8,8 +8,8 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.ErrorReporting; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Internal.Log; -using Microsoft.CodeAnalysis.Notification; using Microsoft.CodeAnalysis.Shared.TestHooks; namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.SolutionCrawler; diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingNormalPriorityProcessor.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingNormalPriorityProcessor.cs index 1fe3c323fddc9..de906318b9248 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingNormalPriorityProcessor.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/SolutionCrawler/UnitTestingWorkCoordinator.UnitTestingNormalPriorityProcessor.cs @@ -10,11 +10,11 @@ using System.Threading.Tasks; using Microsoft.CodeAnalysis.ErrorReporting; using Microsoft.CodeAnalysis.Internal.Log; -using Microsoft.CodeAnalysis.Notification; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; using Roslyn.Utilities; using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Api; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; #if DEBUG using System.Diagnostics; diff --git a/src/VisualStudio/Core/Def/SolutionEventMonitor.cs b/src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/SolutionEventMonitor.cs similarity index 95% rename from src/VisualStudio/Core/Def/SolutionEventMonitor.cs rename to src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/SolutionEventMonitor.cs index 5011b4542c63d..e209d1eaea5ba 100644 --- a/src/VisualStudio/Core/Def/SolutionEventMonitor.cs +++ b/src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/SolutionEventMonitor.cs @@ -5,10 +5,10 @@ using System; using System.Collections.Generic; using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Notification; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.VisualStudio.Shell; -namespace Microsoft.VisualStudio.LanguageServices; +namespace Microsoft.VisualStudio.LanguageServices.ExternalAccess.UnitTesting; /// /// Monitors Visual Studio's UIContext for Solution building/opening/closing and notifies the GlobalOperationService. diff --git a/src/VisualStudio/Core/Def/Notification/VisualStudioGlobalOperationNotificationService.cs b/src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/VisualStudioGlobalOperationNotificationService.cs similarity index 84% rename from src/VisualStudio/Core/Def/Notification/VisualStudioGlobalOperationNotificationService.cs rename to src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/VisualStudioGlobalOperationNotificationService.cs index d5ab5dd3ae2f6..b7eeb9166331b 100644 --- a/src/VisualStudio/Core/Def/Notification/VisualStudioGlobalOperationNotificationService.cs +++ b/src/VisualStudio/Core/Def/ExternalAccess/UnitTesting/VisualStudioGlobalOperationNotificationService.cs @@ -5,11 +5,11 @@ using System; using System.Composition; using Microsoft.CodeAnalysis.Editor.Shared.Utilities; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.Notification; using Microsoft.CodeAnalysis.Shared.TestHooks; -namespace Microsoft.VisualStudio.LanguageServices.Implementation.Notification; +namespace Microsoft.VisualStudio.LanguageServices.ExternalAccess.UnitTesting; [Export(typeof(IGlobalOperationNotificationService)), Shared] [method: ImportingConstructor] diff --git a/src/VisualStudio/Core/Def/RoslynPackage.cs b/src/VisualStudio/Core/Def/RoslynPackage.cs index bb3f93c94449a..767d778be6850 100644 --- a/src/VisualStudio/Core/Def/RoslynPackage.cs +++ b/src/VisualStudio/Core/Def/RoslynPackage.cs @@ -14,10 +14,12 @@ using Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.AsyncCompletion; using Microsoft.CodeAnalysis.Editor.Shared.Utilities; using Microsoft.CodeAnalysis.ErrorReporting; +using Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Notification; using Microsoft.CodeAnalysis.Notification; using Microsoft.CodeAnalysis.Options; using Microsoft.CodeAnalysis.Remote.ProjectSystem; using Microsoft.VisualStudio.LanguageServices.EditorConfigSettings; +using Microsoft.VisualStudio.LanguageServices.ExternalAccess.UnitTesting; using Microsoft.VisualStudio.LanguageServices.Implementation.Diagnostics; using Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService; using Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem.RuleSets; @@ -215,11 +217,8 @@ protected override void Dispose(bool disposing) ReportSessionWideTelemetry(); - if (_solutionEventMonitor != null) - { - _solutionEventMonitor.Dispose(); - _solutionEventMonitor = null; - } + _solutionEventMonitor?.Dispose(); + _solutionEventMonitor = null; base.Dispose(disposing); }