diff --git a/src/VisualStudio/Core/Def/TableDataSource/AbstractRoslynTableDataSource.cs b/src/VisualStudio/Core/Def/TableDataSource/AbstractRoslynTableDataSource.cs
deleted file mode 100644
index 514fcbf434930..0000000000000
--- a/src/VisualStudio/Core/Def/TableDataSource/AbstractRoslynTableDataSource.cs
+++ /dev/null
@@ -1,86 +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.Collections.Immutable;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Shared.Extensions;
-using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
-using Microsoft.CodeAnalysis.SolutionCrawler;
-
-namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource;
-
-///
-/// A version of ITableDataSource who knows how to connect them to Roslyn solution crawler for live information.
-///
-internal abstract class AbstractRoslynTableDataSource : AbstractTableDataSource
- where TItem : TableItem
- where TData : notnull
-{
- public AbstractRoslynTableDataSource(Workspace workspace, IThreadingContext threadingContext)
- : base(workspace, threadingContext)
- => ConnectToSolutionCrawlerService(workspace);
-
- protected ImmutableArray GetDocumentsWithSameFilePath(Solution solution, DocumentId documentId)
- {
- var document = solution.GetTextDocument(documentId);
- if (document == null)
- {
- return ImmutableArray.Empty;
- }
-
- return solution.GetDocumentIdsWithFilePath(document.FilePath);
- }
-
- ///
- /// Flag indicating if a solution crawler is running incremental analyzers in background.
- /// We get build progress updates from .
- /// Solution crawler progress events are guaranteed to be invoked in a serial fashion.
- ///
- protected bool IsSolutionCrawlerRunning { get; private set; }
-
- private void ConnectToSolutionCrawlerService(Workspace workspace)
- {
- var crawlerService = workspace.Services.GetService();
- if (crawlerService == null)
- {
- // can happen depends on host such as testing host.
- return;
- }
-
- var reporter = crawlerService.GetProgressReporter(workspace);
- reporter.ProgressChanged += OnSolutionCrawlerProgressChanged;
-
- // set initial value
- SolutionCrawlerProgressChanged(reporter.InProgress);
- }
-
- private void OnSolutionCrawlerProgressChanged(object sender, ProgressData progressData)
- {
- switch (progressData.Status)
- {
- case ProgressStatus.Started:
- SolutionCrawlerProgressChanged(running: true);
- break;
- case ProgressStatus.Stopped:
- SolutionCrawlerProgressChanged(running: false);
- break;
- }
- }
-
- private void SolutionCrawlerProgressChanged(bool running)
- {
- IsSolutionCrawlerRunning = running;
- ChangeStableStateIfRequired(newIsStable: !IsSolutionCrawlerRunning);
- }
-
- protected void ChangeStableStateIfRequired(bool newIsStable)
- {
- var oldIsStable = IsStable;
- if (oldIsStable != newIsStable)
- {
- IsStable = newIsStable;
- ChangeStableState(newIsStable);
- }
- }
-}
diff --git a/src/VisualStudio/Core/Def/TableDataSource/AbstractTable.cs b/src/VisualStudio/Core/Def/TableDataSource/AbstractTable.cs
deleted file mode 100644
index 065338078995c..0000000000000
--- a/src/VisualStudio/Core/Def/TableDataSource/AbstractTable.cs
+++ /dev/null
@@ -1,93 +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.Collections.Immutable;
-using Microsoft.CodeAnalysis;
-using Microsoft.VisualStudio.Shell.TableManager;
-using Roslyn.Utilities;
-
-namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource;
-
-///
-/// Base implementation of new platform table. this knows how to create various ITableDataSource and connect
-/// them to ITableManagerProvider
-///
-internal abstract class AbstractTable
-{
- protected AbstractTable(Workspace workspace, ITableManagerProvider provider, string tableIdentifier)
- {
- Workspace = workspace;
- this.TableManager = provider.GetTableManager(tableIdentifier);
- }
-
- protected Workspace Workspace { get; }
- internal ITableManager TableManager { get; }
- internal abstract ImmutableArray Columns { get; }
-
- protected abstract void AddTableSourceIfNecessary(Solution solution);
- protected abstract void RemoveTableSourceIfNecessary(Solution solution);
- protected abstract void ShutdownSource();
-
- protected void ConnectWorkspaceEvents()
- => Workspace.WorkspaceChanged += OnWorkspaceChanged;
-
- private void OnWorkspaceChanged(object sender, WorkspaceChangeEventArgs e)
- {
- switch (e.Kind)
- {
- case WorkspaceChangeKind.SolutionAdded:
- case WorkspaceChangeKind.ProjectAdded:
- AddTableSourceIfNecessary(e.NewSolution);
- break;
- case WorkspaceChangeKind.SolutionRemoved:
- case WorkspaceChangeKind.ProjectRemoved:
- ShutdownSourceIfNecessary(e.NewSolution);
- RemoveTableSourceIfNecessary(e.NewSolution);
- break;
- case WorkspaceChangeKind.SolutionChanged:
- case WorkspaceChangeKind.SolutionCleared:
- case WorkspaceChangeKind.SolutionReloaded:
- case WorkspaceChangeKind.ProjectChanged:
- case WorkspaceChangeKind.ProjectReloaded:
- case WorkspaceChangeKind.DocumentAdded:
- case WorkspaceChangeKind.DocumentRemoved:
- case WorkspaceChangeKind.DocumentReloaded:
- case WorkspaceChangeKind.DocumentChanged:
- case WorkspaceChangeKind.AdditionalDocumentAdded:
- case WorkspaceChangeKind.AdditionalDocumentRemoved:
- case WorkspaceChangeKind.AdditionalDocumentReloaded:
- case WorkspaceChangeKind.AdditionalDocumentChanged:
- case WorkspaceChangeKind.AnalyzerConfigDocumentAdded:
- case WorkspaceChangeKind.AnalyzerConfigDocumentRemoved:
- case WorkspaceChangeKind.AnalyzerConfigDocumentChanged:
- case WorkspaceChangeKind.AnalyzerConfigDocumentReloaded:
- break;
- default:
- throw ExceptionUtilities.UnexpectedValue(e.Kind);
- }
- }
-
- private void ShutdownSourceIfNecessary(Solution solution)
- {
- if (solution.ProjectIds.Count > 0)
- {
- return;
- }
-
- ShutdownSource();
- }
-
- protected void AddInitialTableSource(Solution solution, ITableDataSource source)
- {
- if (solution.ProjectIds.Count == 0)
- {
- return;
- }
-
- AddTableSource(source);
- }
-
- protected void AddTableSource(ITableDataSource source)
- => this.TableManager.AddSource(source, Columns);
-}
diff --git a/src/VisualStudio/Core/Def/TableDataSource/AbstractTableControlEventProcessorProvider.cs b/src/VisualStudio/Core/Def/TableDataSource/AbstractTableControlEventProcessorProvider.cs
deleted file mode 100644
index c497e6527825e..0000000000000
--- a/src/VisualStudio/Core/Def/TableDataSource/AbstractTableControlEventProcessorProvider.cs
+++ /dev/null
@@ -1,54 +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.Threading;
-using Microsoft.CodeAnalysis.Navigation;
-using Microsoft.VisualStudio.Shell.TableControl;
-
-namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource;
-
-internal abstract class AbstractTableControlEventProcessorProvider : ITableControlEventProcessorProvider
- where TItem : TableItem
-{
- public ITableControlEventProcessor GetAssociatedEventProcessor(IWpfTableControl tableControl)
- => CreateEventProcessor();
-
- protected virtual EventProcessor CreateEventProcessor()
- => new();
-
- protected class EventProcessor : TableControlEventProcessorBase
- {
- protected static AbstractTableEntriesSnapshot? GetEntriesSnapshot(ITableEntryHandle entryHandle)
- => GetEntriesSnapshot(entryHandle, out _);
-
- protected static AbstractTableEntriesSnapshot? GetEntriesSnapshot(ITableEntryHandle entryHandle, out int index)
- {
- if (!entryHandle.TryGetSnapshot(out var snapshot, out index))
- {
- return null;
- }
-
- return snapshot as AbstractTableEntriesSnapshot;
- }
-
- public override void PreprocessNavigate(ITableEntryHandle entryHandle, TableEntryNavigateEventArgs e)
- {
- var roslynSnapshot = GetEntriesSnapshot(entryHandle, out var index);
- if (roslynSnapshot == null)
- {
- return;
- }
-
- // don't be too strict on navigation on our item. if we can't handle the item,
- // let default handler to handle it at least.
- // we might fail to navigate if we don't see the document in our solution anymore.
- // that can happen if error is staled build error or user used #line pragma in C#
- // to point to some random file in error or more.
-
- // TODO: Use a threaded-wait-dialog here so we can cancel navigation.
- var options = new NavigationOptions(PreferProvisionalTab: e.IsPreview, ActivateTab: e.ShouldActivate);
- e.Handled = roslynSnapshot.TryNavigateTo(index, options, CancellationToken.None);
- }
- }
-}
diff --git a/src/VisualStudio/Core/Def/TableDataSource/AbstractTableDataSource.cs b/src/VisualStudio/Core/Def/TableDataSource/AbstractTableDataSource.cs
deleted file mode 100644
index 726a65187a762..0000000000000
--- a/src/VisualStudio/Core/Def/TableDataSource/AbstractTableDataSource.cs
+++ /dev/null
@@ -1,422 +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.Collections.Generic;
-using System.Collections.Immutable;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
-using Microsoft.CodeAnalysis.PooledObjects;
-using Microsoft.VisualStudio.Shell.TableManager;
-using Microsoft.VisualStudio.Text;
-using Roslyn.Utilities;
-
-namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource;
-
-///
-/// Base implementation of ITableDataSource
-///
-internal abstract class AbstractTableDataSource : ITableDataSource
- where TItem : TableItem
- where TData : notnull
-{
- private readonly object _gate = new();
-
- // This map holds aggregation key to factory
- // Any data that shares same aggregation key will de-duplicated to same factory
- private readonly Dictionary