提交 9a48dff6 编写于 作者: H Heejae Chang

Merge pull request #1691 from heejaechang/errorlistfix

force error list update when we find snapshot becomes out of sync
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource
{
internal abstract class AbstractRoslynTableDataSource<TArgs, TData> : AbstractTableDataSource<TData>
{
protected abstract AbstractTableEntriesFactory<TData> CreateTableEntryFactory(object key, TArgs data);
protected void OnDataAddedOrChanged(object key, TArgs data, int itemCount)
{
// reuse factory. it is okay to re-use factory since we make sure we remove the factory before
// adding it back
bool newFactory = false;
ImmutableArray<SubscriptionWithoutLock> snapshot;
AbstractTableEntriesFactory<TData> factory;
lock (Gate)
{
snapshot = Subscriptions;
if (!Map.TryGetValue(key, out factory))
{
factory = CreateTableEntryFactory(key, data);
Map.Add(key, factory);
newFactory = true;
}
}
factory.OnUpdated(itemCount);
for (var i = 0; i < snapshot.Length; i++)
{
snapshot[i].AddOrUpdate(factory, newFactory);
}
}
}
}
...@@ -15,9 +15,9 @@ internal abstract class AbstractTable<TArgs, TData> ...@@ -15,9 +15,9 @@ internal abstract class AbstractTable<TArgs, TData>
private readonly Workspace _workspace; private readonly Workspace _workspace;
private readonly ITableManagerProvider _provider; private readonly ITableManagerProvider _provider;
protected readonly AbstractTableDataSource<TArgs, TData> Source; protected readonly AbstractRoslynTableDataSource<TArgs, TData> Source;
protected AbstractTable(Workspace workspace, ITableManagerProvider provider, Guid tableIdentifier, AbstractTableDataSource<TArgs, TData> source) protected AbstractTable(Workspace workspace, ITableManagerProvider provider, Guid tableIdentifier, AbstractRoslynTableDataSource<TArgs, TData> source)
{ {
_workspace = workspace; _workspace = workspace;
_provider = provider; _provider = provider;
......
...@@ -6,23 +6,22 @@ ...@@ -6,23 +6,22 @@
using System.Linq; using System.Linq;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.SolutionCrawler; using Microsoft.CodeAnalysis.SolutionCrawler;
using Microsoft.VisualStudio.TableControl;
using Microsoft.VisualStudio.TableManager; using Microsoft.VisualStudio.TableManager;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource
{ {
internal abstract class AbstractTableDataSource<TArgs, TData> : ITableDataSource internal abstract class AbstractTableDataSource<TData> : ITableDataSource
{ {
private readonly object _gate; protected readonly object Gate;
private readonly Dictionary<object, AbstractTableEntriesFactory<TData>> _map; protected readonly Dictionary<object, AbstractTableEntriesFactory<TData>> Map;
private ImmutableArray<SubscriptionWithoutLock> _subscriptions; protected ImmutableArray<SubscriptionWithoutLock> Subscriptions;
public AbstractTableDataSource() public AbstractTableDataSource()
{ {
_gate = new object(); Gate = new object();
_map = new Dictionary<object, AbstractTableEntriesFactory<TData>>(); Map = new Dictionary<object, AbstractTableEntriesFactory<TData>>();
_subscriptions = ImmutableArray<SubscriptionWithoutLock>.Empty; Subscriptions = ImmutableArray<SubscriptionWithoutLock>.Empty;
} }
public virtual void OnProjectDependencyChanged(Solution solution) public virtual void OnProjectDependencyChanged(Solution solution)
...@@ -36,7 +35,15 @@ public virtual void OnProjectDependencyChanged(Solution solution) ...@@ -36,7 +35,15 @@ public virtual void OnProjectDependencyChanged(Solution solution)
public abstract Guid Identifier { get; } public abstract Guid Identifier { get; }
protected abstract AbstractTableEntriesFactory<TData> CreateTableEntryFactory(object key, TArgs data); public void Refresh(AbstractTableEntriesFactory<TData> factory)
{
var snapshot = this.Subscriptions;
for (var i = 0; i < snapshot.Length; i++)
{
snapshot[i].AddOrUpdate(factory, newFactory: false);
}
}
protected void ConnectToSolutionCrawlerService(Workspace workspace) protected void ConnectToSolutionCrawlerService(Workspace workspace)
{ {
...@@ -60,49 +67,22 @@ private void OnSolutionCrawlerStopped(object sender, EventArgs e) ...@@ -60,49 +67,22 @@ private void OnSolutionCrawlerStopped(object sender, EventArgs e)
ChangeStableState(stable: true); ChangeStableState(stable: true);
} }
protected void OnDataAddedOrChanged(object key, TArgs data, int itemCount)
{
// reuse factory. it is okay to re-use factory since we make sure we remove the factory before
// adding it back
bool newFactory = false;
ImmutableArray<SubscriptionWithoutLock> snapshot;
AbstractTableEntriesFactory<TData> factory;
lock (_gate)
{
snapshot = _subscriptions;
if (!_map.TryGetValue(key, out factory))
{
factory = CreateTableEntryFactory(key, data);
_map.Add(key, factory);
newFactory = true;
}
}
factory.OnUpdated(itemCount);
for (var i = 0; i < snapshot.Length; i++)
{
snapshot[i].AddOrUpdate(factory, newFactory);
}
}
protected void OnDataRemoved(object key) protected void OnDataRemoved(object key)
{ {
ImmutableArray<SubscriptionWithoutLock> snapshot; ImmutableArray<SubscriptionWithoutLock> snapshot;
AbstractTableEntriesFactory<TData> factory; AbstractTableEntriesFactory<TData> factory;
lock (_gate) lock (Gate)
{ {
snapshot = _subscriptions; snapshot = Subscriptions;
if (!_map.TryGetValue(key, out factory)) if (!Map.TryGetValue(key, out factory))
{ {
// never reported about this before // never reported about this before
return; return;
} }
// remove it from map // remove it from map
_map.Remove(key); Map.Remove(key);
} }
factory.OnUpdated(0); factory.OnUpdated(0);
...@@ -118,9 +98,9 @@ private void ChangeStableState(bool stable) ...@@ -118,9 +98,9 @@ private void ChangeStableState(bool stable)
{ {
ImmutableArray<SubscriptionWithoutLock> snapshot; ImmutableArray<SubscriptionWithoutLock> snapshot;
lock (_gate) lock (Gate)
{ {
snapshot = _subscriptions; snapshot = Subscriptions;
} }
for (var i = 0; i < snapshot.Length; i++) for (var i = 0; i < snapshot.Length; i++)
...@@ -134,10 +114,10 @@ protected void RefreshAllFactories() ...@@ -134,10 +114,10 @@ protected void RefreshAllFactories()
ImmutableArray<SubscriptionWithoutLock> snapshot; ImmutableArray<SubscriptionWithoutLock> snapshot;
List<AbstractTableEntriesFactory<TData>> factories; List<AbstractTableEntriesFactory<TData>> factories;
lock (_gate) lock (Gate)
{ {
snapshot = _subscriptions; snapshot = Subscriptions;
factories = _map.Values.ToList(); factories = Map.Values.ToList();
} }
// let table manager know that we want to refresh factories. // let table manager know that we want to refresh factories.
...@@ -154,7 +134,7 @@ protected void RefreshAllFactories() ...@@ -154,7 +134,7 @@ protected void RefreshAllFactories()
IDisposable ITableDataSource.Subscribe(ITableDataSink sink) IDisposable ITableDataSource.Subscribe(ITableDataSink sink)
{ {
lock (_gate) lock (Gate)
{ {
return new SubscriptionWithoutLock(this, sink); return new SubscriptionWithoutLock(this, sink);
} }
...@@ -162,15 +142,15 @@ IDisposable ITableDataSource.Subscribe(ITableDataSink sink) ...@@ -162,15 +142,15 @@ IDisposable ITableDataSource.Subscribe(ITableDataSink sink)
internal int NumberOfSubscription_TestOnly internal int NumberOfSubscription_TestOnly
{ {
get { return _subscriptions.Length; } get { return Subscriptions.Length; }
} }
private class SubscriptionWithoutLock : IDisposable protected class SubscriptionWithoutLock : IDisposable
{ {
private readonly AbstractTableDataSource<TArgs, TData> _source; private readonly AbstractTableDataSource<TData> _source;
private readonly ITableDataSink _sink; private readonly ITableDataSink _sink;
public SubscriptionWithoutLock(AbstractTableDataSource<TArgs, TData> source, ITableDataSink sink) public SubscriptionWithoutLock(AbstractTableDataSource<TData> source, ITableDataSink sink)
{ {
_source = source; _source = source;
_sink = sink; _sink = sink;
...@@ -216,7 +196,7 @@ public void Dispose() ...@@ -216,7 +196,7 @@ public void Dispose()
private void ReportInitialData() private void ReportInitialData()
{ {
foreach (var provider in _source._map.Values) foreach (var provider in _source.Map.Values)
{ {
AddOrUpdate(provider, newFactory: true); AddOrUpdate(provider, newFactory: true);
} }
...@@ -236,11 +216,11 @@ private void UpdateSubscriptions(Func<ImmutableArray<SubscriptionWithoutLock>, I ...@@ -236,11 +216,11 @@ private void UpdateSubscriptions(Func<ImmutableArray<SubscriptionWithoutLock>, I
{ {
while (true) while (true)
{ {
var current = _source._subscriptions; var current = _source.Subscriptions;
var @new = update(current); var @new = update(current);
// try replace with new list // try replace with new list
var registered = ImmutableInterlocked.InterlockedCompareExchange(ref _source._subscriptions, @new, current); var registered = ImmutableInterlocked.InterlockedCompareExchange(ref _source.Subscriptions, @new, current);
if (registered == current) if (registered == current)
{ {
// succeeded // succeeded
......
...@@ -15,11 +15,17 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource ...@@ -15,11 +15,17 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource
internal abstract class AbstractTableEntriesFactory<TData> : ITableEntriesSnapshotFactory internal abstract class AbstractTableEntriesFactory<TData> : ITableEntriesSnapshotFactory
{ {
private readonly object _gate = new object(); private readonly object _gate = new object();
private readonly AbstractTableDataSource<TData> _source;
private readonly WeakReference<ITableEntriesSnapshot> _lastSnapshotWeakReference = new WeakReference<ITableEntriesSnapshot>(null); private readonly WeakReference<ITableEntriesSnapshot> _lastSnapshotWeakReference = new WeakReference<ITableEntriesSnapshot>(null);
private int _lastVersion = 0; private int _lastVersion = 0;
private int _lastItemCount = 0; private int _lastItemCount = 0;
public AbstractTableEntriesFactory(AbstractTableDataSource<TData> source)
{
_source = source;
}
protected abstract ImmutableArray<TData> GetItems(); protected abstract ImmutableArray<TData> GetItems();
protected abstract ImmutableArray<ITrackingPoint> GetTrackingPoints(ImmutableArray<TData> items); protected abstract ImmutableArray<ITrackingPoint> GetTrackingPoints(ImmutableArray<TData> items);
protected abstract AbstractTableEntriesSnapshot<TData> CreateSnapshot(int version, ImmutableArray<TData> items, ImmutableArray<ITrackingPoint> trackingPoints); protected abstract AbstractTableEntriesSnapshot<TData> CreateSnapshot(int version, ImmutableArray<TData> items, ImmutableArray<ITrackingPoint> trackingPoints);
...@@ -53,6 +59,7 @@ public ITableEntriesSnapshot GetCurrentSnapshot() ...@@ -53,6 +59,7 @@ public ITableEntriesSnapshot GetCurrentSnapshot()
if (items.Length != itemCount) if (items.Length != itemCount)
{ {
_lastItemCount = items.Length; _lastItemCount = items.Length;
_source.Refresh(this);
} }
return CreateSnapshot(version, items); return CreateSnapshot(version, items);
...@@ -72,6 +79,7 @@ public ITableEntriesSnapshot GetSnapshot(int versionNumber) ...@@ -72,6 +79,7 @@ public ITableEntriesSnapshot GetSnapshot(int versionNumber)
var version = _lastVersion; var version = _lastVersion;
if (version != versionNumber) if (version != versionNumber)
{ {
_source.Refresh(this);
return null; return null;
} }
...@@ -83,6 +91,7 @@ public ITableEntriesSnapshot GetSnapshot(int versionNumber) ...@@ -83,6 +91,7 @@ public ITableEntriesSnapshot GetSnapshot(int versionNumber)
var items = GetItems(); var items = GetItems();
if (items.Length != _lastItemCount) if (items.Length != _lastItemCount)
{ {
_source.Refresh(this);
return null; return null;
} }
......
...@@ -73,7 +73,7 @@ protected override void SolutionOrProjectChanged(WorkspaceChangeEventArgs e) ...@@ -73,7 +73,7 @@ protected override void SolutionOrProjectChanged(WorkspaceChangeEventArgs e)
} }
} }
private class TableDataSource : AbstractTableDataSource<DiagnosticsUpdatedArgs, DiagnosticData> private class TableDataSource : AbstractRoslynTableDataSource<DiagnosticsUpdatedArgs, DiagnosticData>
{ {
private readonly Guid _identifier; private readonly Guid _identifier;
private readonly IDiagnosticService _diagnosticService; private readonly IDiagnosticService _diagnosticService;
...@@ -182,7 +182,8 @@ private class TableEntriesFactory : AbstractTableEntriesFactory<DiagnosticData> ...@@ -182,7 +182,8 @@ private class TableEntriesFactory : AbstractTableEntriesFactory<DiagnosticData>
private readonly DocumentId _documentId; private readonly DocumentId _documentId;
private readonly object _id; private readonly object _id;
public TableEntriesFactory(TableDataSource source, Workspace workspace, ProjectId projectId, DocumentId documentId, object id) public TableEntriesFactory(TableDataSource source, Workspace workspace, ProjectId projectId, DocumentId documentId, object id) :
base(source)
{ {
_source = source; _source = source;
_workspace = workspace; _workspace = workspace;
......
...@@ -38,7 +38,7 @@ internal class VisualStudioBaseTodoListTable : AbstractTable<TaskListEventArgs, ...@@ -38,7 +38,7 @@ internal class VisualStudioBaseTodoListTable : AbstractTable<TaskListEventArgs,
internal override IReadOnlyCollection<string> Columns { get { return s_columns; } } internal override IReadOnlyCollection<string> Columns { get { return s_columns; } }
private class TableDataSource : AbstractTableDataSource<TaskListEventArgs, TodoTaskItem> private class TableDataSource : AbstractRoslynTableDataSource<TaskListEventArgs, TodoTaskItem>
{ {
private readonly Workspace _workspace; private readonly Workspace _workspace;
private readonly Guid _identifier; private readonly Guid _identifier;
...@@ -110,7 +110,8 @@ private class TableEntriesFactory : AbstractTableEntriesFactory<TodoTaskItem> ...@@ -110,7 +110,8 @@ private class TableEntriesFactory : AbstractTableEntriesFactory<TodoTaskItem>
private readonly Workspace _workspace; private readonly Workspace _workspace;
private readonly DocumentId _documentId; private readonly DocumentId _documentId;
public TableEntriesFactory(TableDataSource source, Workspace workspace, DocumentId documentId) public TableEntriesFactory(TableDataSource source, Workspace workspace, DocumentId documentId) :
base(source)
{ {
_source = source; _source = source;
_workspace = workspace; _workspace = workspace;
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
<Compile Include="Implementation\ProjectSystem\Interop\IVsUndoState.cs" /> <Compile Include="Implementation\ProjectSystem\Interop\IVsUndoState.cs" />
<Compile Include="Implementation\Serialization\AssemblySerializationInfoService.cs" /> <Compile Include="Implementation\Serialization\AssemblySerializationInfoService.cs" />
<Compile Include="Implementation\SolutionSize\SolutionSizeTracker.cs" /> <Compile Include="Implementation\SolutionSize\SolutionSizeTracker.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTableDataSource.cs" />
<Compile Include="Implementation\TableDataSource\MiscDiagnosticTableControlEventProcessorProvider.cs" /> <Compile Include="Implementation\TableDataSource\MiscDiagnosticTableControlEventProcessorProvider.cs" />
<Compile Include="Implementation\TableDataSource\MiscellaneousDiagnosticListTable.cs" /> <Compile Include="Implementation\TableDataSource\MiscellaneousDiagnosticListTable.cs" />
<Compile Include="Implementation\TableDataSource\MiscellaneousTodoListTable.cs" /> <Compile Include="Implementation\TableDataSource\MiscellaneousTodoListTable.cs" />
...@@ -360,7 +361,7 @@ ...@@ -360,7 +361,7 @@
<Compile Include="Implementation\ProjectSystem\RuleSets\VisualStudioRuleSetManager.RuleSetFile.cs" /> <Compile Include="Implementation\ProjectSystem\RuleSets\VisualStudioRuleSetManager.RuleSetFile.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTable.cs" /> <Compile Include="Implementation\TableDataSource\AbstractTable.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTableControlEventProcessorProvider.cs" /> <Compile Include="Implementation\TableDataSource\AbstractTableControlEventProcessorProvider.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTableDataSource.cs" /> <Compile Include="Implementation\TableDataSource\AbstractRoslynTableDataSource.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTableEntriesFactory.cs" /> <Compile Include="Implementation\TableDataSource\AbstractTableEntriesFactory.cs" />
<Compile Include="Implementation\TableDataSource\AbstractTableEntriesSnapshot.cs" /> <Compile Include="Implementation\TableDataSource\AbstractTableEntriesSnapshot.cs" />
<Compile Include="Implementation\TableDataSource\DiagnosticTableControlEventProcessorProvider.cs" /> <Compile Include="Implementation\TableDataSource\DiagnosticTableControlEventProcessorProvider.cs" />
......
...@@ -30,7 +30,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -30,7 +30,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
Assert.Equal(manager.Identifier, StandardTables.ErrorsTable) Assert.Equal(manager.Identifier, StandardTables.ErrorsTable)
Assert.Equal(1, manager.Sources.Count()) Assert.Equal(1, manager.Sources.Count())
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
AssertEx.SetEqual(table.Columns, manager.GetColumnsForSources(SpecializedCollections.SingletonEnumerable(source))) AssertEx.SetEqual(table.Columns, manager.GetColumnsForSources(SpecializedCollections.SingletonEnumerable(source)))
Assert.Equal(ServicesVSResources.DiagnosticsTableSourceName, source.DisplayName) Assert.Equal(ServicesVSResources.DiagnosticsTableSourceName, source.DisplayName)
...@@ -61,7 +61,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -61,7 +61,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -79,7 +79,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -79,7 +79,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
Dim table = New VisualStudioDiagnosticListTable(workspace, provider, tableManagerProvider) Dim table = New VisualStudioDiagnosticListTable(workspace, provider, tableManagerProvider)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -107,7 +107,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -107,7 +107,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -148,7 +148,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -148,7 +148,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -196,7 +196,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -196,7 +196,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -228,7 +228,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -228,7 +228,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -254,7 +254,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -254,7 +254,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -282,7 +282,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -282,7 +282,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace1) provider.RaiseDiagnosticsUpdated(workspace1)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -316,7 +316,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -316,7 +316,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -353,7 +353,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -353,7 +353,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -385,7 +385,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -385,7 +385,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -417,7 +417,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -417,7 +417,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -446,7 +446,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -446,7 +446,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -475,7 +475,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -475,7 +475,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseDiagnosticsUpdated(workspace) provider.RaiseDiagnosticsUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of DiagnosticsUpdatedArgs, DiagnosticData))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
......
...@@ -26,7 +26,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -26,7 +26,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
Assert.Equal(manager.Identifier, StandardTables.TasksTable) Assert.Equal(manager.Identifier, StandardTables.TasksTable)
Assert.Equal(1, manager.Sources.Count()) Assert.Equal(1, manager.Sources.Count())
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
AssertEx.SetEqual(table.Columns, manager.GetColumnsForSources(SpecializedCollections.SingletonEnumerable(source))) AssertEx.SetEqual(table.Columns, manager.GetColumnsForSources(SpecializedCollections.SingletonEnumerable(source)))
Assert.Equal(ServicesVSResources.TodoTableSourceName, source.DisplayName) Assert.Equal(ServicesVSResources.TodoTableSourceName, source.DisplayName)
...@@ -57,7 +57,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -57,7 +57,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -75,7 +75,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -75,7 +75,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
Dim table = New VisualStudioTodoListTable(workspace, provider, tableManagerProvider) Dim table = New VisualStudioTodoListTable(workspace, provider, tableManagerProvider)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -103,7 +103,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -103,7 +103,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -144,7 +144,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -144,7 +144,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -192,7 +192,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -192,7 +192,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -222,7 +222,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -222,7 +222,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -255,7 +255,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -255,7 +255,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
...@@ -288,7 +288,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics ...@@ -288,7 +288,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
provider.RaiseTodoListUpdated(workspace) provider.RaiseTodoListUpdated(workspace)
Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager) Dim manager = DirectCast(table.TableManager, TestTableManagerProvider.TestTableManager)
Dim source = DirectCast(manager.Sources.First(), AbstractTableDataSource(Of TaskListEventArgs, TodoTaskItem)) Dim source = DirectCast(manager.Sources.First(), AbstractRoslynTableDataSource(Of TaskListEventArgs, TodoTaskItem))
Dim sinkAndSubscription = manager.Sinks_TestOnly.First() Dim sinkAndSubscription = manager.Sinks_TestOnly.First()
Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink) Dim sink = DirectCast(sinkAndSubscription.Key, TestTableManagerProvider.TestTableManager.TestSink)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册