提交 c7000f23 编写于 作者: M Manish Vasani
上级 e17f775b
......@@ -5,6 +5,7 @@
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.ErrorReporting;
using Roslyn.Utilities;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.TableDataSource
......@@ -29,22 +30,27 @@ public TableItem(T item, Func<T, int> keyGenerator)
public TableItem(IEnumerable<TableItem<T>> items)
{
#if DEBUG
// If code reached here,
// There must be at least 1 item in the list
Contract.ThrowIfFalse(items.Count() > 0);
var itemCount = items.Count();
if (itemCount == 0)
{
// There must be at least 1 item in the list
FatalError.ReportWithoutCrash(new ArgumentException("Contains no items", nameof(items)));
}
// There must be document id
Contract.ThrowIfTrue(items.Any(i => i.PrimaryDocumentId == null));
#endif
var filteredItems = items.Where(i => i.PrimaryDocumentId != null);
if (filteredItems.Count() != itemCount)
{
// There must be document id for provided items.
FatalError.ReportWithoutCrash(new ArgumentException("Contains an item with null PrimaryDocumentId", nameof(items)));
}
var first = true;
var collectionHash = 1;
var count = 0;
// Make things to be deterministic.
var ordereditems = items.OrderBy(i => i.PrimaryDocumentId.Id);
foreach (var item in ordereditems)
var orderedItems = filteredItems.OrderBy(i => i.PrimaryDocumentId.Id);
foreach (var item in orderedItems)
{
count++;
......@@ -68,7 +74,7 @@ public TableItem(IEnumerable<TableItem<T>> items)
}
// order of item is important. make sure we maintain it.
_cache = SharedInfoCache.GetOrAdd(collectionHash, ordereditems, c => new SharedInfoCache(c.Select(i => i.PrimaryDocumentId).ToImmutableArray()));
_cache = SharedInfoCache.GetOrAdd(collectionHash, orderedItems, c => new SharedInfoCache(c.Select(i => i.PrimaryDocumentId).ToImmutableArray()));
}
public DocumentId PrimaryDocumentId
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册