diff --git a/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.vb b/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.vb index 76c88edf7db4b20a96608065cbbc184f84e8c1a2..35ce715e36264daddc56be21b0aa00e43acf73e5 100644 --- a/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.vb +++ b/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.vb @@ -6,6 +6,7 @@ Imports System.Threading.Tasks Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Editor.Navigation Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces +Imports Microsoft.CodeAnalysis.FindReferences Imports Microsoft.CodeAnalysis.FindSymbols Imports Microsoft.CodeAnalysis.Text Imports Roslyn.Utilities @@ -50,7 +51,9 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences d.Name, d.AnnotatedSpans(DefinitionKey).ToList())).ToList() Dim actualDefinitions = GetFileNamesAndSpans( - context.Definitions.Where(AddressOf context.ShouldShow)) + context.Definitions.Where(AddressOf context.ShouldShow). + OfType(Of DefinitionLocation.DocumentDefinitionLocation). + Select(Function(d) d.Location)) Assert.Equal(expectedDefinitions, actualDefinitions) @@ -60,21 +63,22 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences Select(Function(d) New FileNameAndSpans( d.Name, d.SelectedSpans.ToList())).ToList() - Dim actualReferences = GetFileNamesAndSpans(context.References) + Dim actualReferences = GetFileNamesAndSpans( + context.References.Select(Function(r) r.Location)) Assert.Equal(expectedReferences, actualReferences) Next End Using End Function - Private Function GetFileNamesAndSpans(items As IEnumerable(Of INavigableItem)) As List(Of FileNameAndSpans) + Private Function GetFileNamesAndSpans(items As IEnumerable(Of DocumentLocation)) As List(Of FileNameAndSpans) Return items.Where(Function(i) i.Document IsNot Nothing). GroupBy(Function(i) i.Document). OrderBy(Function(g) g.Key.Name). Select(Function(g) GetFileNameAndSpans(g)).ToList() End Function - Private Function GetFileNameAndSpans(g As IGrouping(Of Document, INavigableItem)) As FileNameAndSpans + Private Function GetFileNameAndSpans(g As IGrouping(Of Document, DocumentLocation)) As FileNameAndSpans Return New FileNameAndSpans( g.Key.Name, g.Select(Function(i) i.SourceSpan).OrderBy(Function(s) s.Start). @@ -112,16 +116,16 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences Private ReadOnly gate As Object = New Object() - Private ReadOnly definitionToShouldShowWithNoReferences As Dictionary(Of INavigableItem, Boolean) = New Dictionary(Of INavigableItem, Boolean) - Public ReadOnly definitionToReferences As MultiDictionary(Of INavigableItem, INavigableItem) = New MultiDictionary(Of INavigableItem, INavigableItem) + Private ReadOnly definitionToShouldShowWithNoReferences As Dictionary(Of DefinitionItem, Boolean) = New Dictionary(Of DefinitionItem, Boolean) + Public ReadOnly definitionToReferences As MultiDictionary(Of DefinitionItem, SourceReferenceItem) = New MultiDictionary(Of DefinitionItem, SourceReferenceItem) - Public ReadOnly Property Definitions As IEnumerable(Of INavigableItem) + Public ReadOnly Property Definitions As IEnumerable(Of DefinitionItem) Get Return definitionToShouldShowWithNoReferences.Keys End Get End Property - Public Iterator Function References() As IEnumerable(Of INavigableItem) + Public Iterator Function References() As IEnumerable(Of SourceReferenceItem) For Each kvp In definitionToReferences For Each value In kvp.Value Yield value @@ -130,7 +134,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences End Function - Public Function ShouldShow(definition As INavigableItem) As Boolean + Public Function ShouldShow(definition As DefinitionItem) As Boolean If definitionToReferences(definition).Count > 0 Then Return True End If @@ -138,16 +142,16 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences Return definitionToShouldShowWithNoReferences(definition) End Function - Public Overrides Sub OnDefinitionFound(definition As INavigableItem, + Public Overrides Sub OnDefinitionFound(definition As DefinitionItem, shouldDisplayWithNoReferences As Boolean) SyncLock gate Me.definitionToShouldShowWithNoReferences(definition) = shouldDisplayWithNoReferences End SyncLock End Sub - Public Overrides Sub OnReferenceFound(definition As INavigableItem, reference As INavigableItem) + Public Overrides Sub OnReferenceFound(reference As SourceReferenceItem) SyncLock gate - definitionToReferences.Add(definition, reference) + definitionToReferences.Add(reference.Definition, reference) End SyncLock End Sub End Class diff --git a/src/Features/Core/Portable/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs b/src/Features/Core/Portable/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs index 1432473c321ff6b0c48d2e94b4779aaf350ecd6d..044080d20360713c3e9c606693e912a4451ed29a 100644 --- a/src/Features/Core/Portable/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs +++ b/src/Features/Core/Portable/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs @@ -10,13 +10,14 @@ internal partial class DefinitionLocation /// Implementation of a that sits on top of a /// . /// - private sealed class DocumentDefinitionLocation : DefinitionLocation + // Internal for testing purposes only. + internal sealed class DocumentDefinitionLocation : DefinitionLocation { - private readonly DocumentLocation _location; + public readonly DocumentLocation Location; public DocumentDefinitionLocation(DocumentLocation location) { - _location = location; + Location = location; } /// @@ -24,10 +25,10 @@ public DocumentDefinitionLocation(DocumentLocation location) /// Origination of this . /// public override ImmutableArray OriginationParts => - ImmutableArray.Create(new TaggedText(TextTags.Text, _location.Document.Project.Name)); + ImmutableArray.Create(new TaggedText(TextTags.Text, Location.Document.Project.Name)); - public override bool CanNavigateTo() => _location.CanNavigateTo(); - public override bool TryNavigateTo() => _location.TryNavigateTo(); + public override bool CanNavigateTo() => Location.CanNavigateTo(); + public override bool TryNavigateTo() => Location.TryNavigateTo(); } } } \ No newline at end of file