提交 de31386d 编写于 作者: C CyrusNajmabadi

Restore filtering logic

上级 028ea28b
......@@ -11,6 +11,7 @@
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Editor.Implementation.FindReferences
......@@ -30,12 +31,15 @@ internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReference
var definitions = ImmutableArray.CreateBuilder<DefinitionItem>();
var references = ImmutableArray.CreateBuilder<SourceReferenceItem>();
var uniqueLocations = new HashSet<ValueTuple<Document, TextSpan>>();
// Order the symbols by precedence, then create the appropriate
// definition item per symbol and all refernece items for its
// reference locations.
foreach (var referencedSymbol in referencedSymbols.OrderBy(GetPrecedence))
{
ProcessReferencedSymbol(solution, referencedSymbol, definitions, references);
ProcessReferencedSymbol(
solution, referencedSymbol, definitions, references, uniqueLocations);
}
return new DefinitionsAndReferences(definitions.ToImmutable(), references.ToImmutable());
......@@ -80,7 +84,8 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol)
Solution solution,
ReferencedSymbol referencedSymbol,
ImmutableArray<DefinitionItem>.Builder definitions,
ImmutableArray<SourceReferenceItem>.Builder references)
ImmutableArray<SourceReferenceItem>.Builder references,
HashSet<ValueTuple<Document, TextSpan>> uniqueLocations)
{
// See if this is a symbol we even want to present to the user. If not,
// ignore it entirely (including all its reference locations).
......@@ -101,7 +106,7 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol)
// Now, create the SourceReferenceItems for all the reference locations
// for this definition.
CreateReferences(referencedSymbol, references, definitionItem);
CreateReferences(referencedSymbol, references, definitionItem, uniqueLocations);
// Finally, see if there are any third parties that want to add their
// own result to our collection.
......@@ -214,21 +219,27 @@ private static ImmutableArray<Location> FilterDefinitionLocations(ISymbol defini
private static void CreateReferences(
ReferencedSymbol referencedSymbol,
ImmutableArray<SourceReferenceItem>.Builder references,
DefinitionItem definitionItem)
DefinitionItem definitionItem,
HashSet<ValueTuple<Document, TextSpan>> uniqueLocations)
{
foreach (var referenceLocation in referencedSymbol.Locations)
{
var location = referenceLocation.Location;
Debug.Assert(location.IsInSource);
var documentLocation = new DocumentLocation(
referenceLocation.Document, referenceLocation.Location.SourceSpan);
if (!documentLocation.CanNavigateTo())
var document = referenceLocation.Document;
var sourceSpan = location.SourceSpan;
if (uniqueLocations.Add(ValueTuple.Create(document, sourceSpan)))
{
continue;
}
var documentLocation = new DocumentLocation(document, sourceSpan);
if (!documentLocation.CanNavigateTo())
{
continue;
}
references.Add(new SourceReferenceItem(definitionItem, documentLocation));
references.Add(new SourceReferenceItem(definitionItem, documentLocation));
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册