From b8ef530352ba9eb7f72e97ca06d97bd83577a4fe Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Sun, 24 Jul 2016 20:18:23 -0700 Subject: [PATCH] Get namespace right. --- ...tionLocation.DocumentDefinitionLocation.cs | 12 ++---- .../FindReferences/DefinitionLocation.cs | 5 +-- .../IDefinitionsAndReferencesFactory.cs | 40 +++++++++---------- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs b/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs index 0a8318b8547..93fc8144ef4 100644 --- a/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs +++ b/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.DocumentDefinitionLocation.cs @@ -9,20 +9,14 @@ internal partial class DefinitionLocation private sealed class DocumentDefinitionLocation : DefinitionLocation { private readonly DocumentLocation _location; - private readonly ImmutableArray _originationParts; - public DocumentDefinitionLocation( - DocumentLocation location, - ImmutableArray originationParts) + public DocumentDefinitionLocation(DocumentLocation location) { _location = location; - - _originationParts = originationParts.IsDefault - ? ImmutableArray.Create(new TaggedText(TextTags.Text, _location.Document.Project.Name)) - : originationParts; } - public override ImmutableArray OriginationParts => _originationParts; + public override ImmutableArray OriginationParts => + ImmutableArray.Create(new TaggedText(TextTags.Text, _location.Document.Project.Name)); public override bool CanNavigateTo() { diff --git a/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.cs b/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.cs index c8ec0d1f8cf..ef51b30d550 100644 --- a/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.cs +++ b/src/EditorFeatures/Core/Implementation/FindReferences/DefinitionLocation.cs @@ -29,10 +29,9 @@ protected DefinitionLocation() public abstract bool CanNavigateTo(); public abstract bool TryNavigateTo(); - public static DefinitionLocation CreateDocumentLocation( - DocumentLocation location, ImmutableArray originationParts = default(ImmutableArray)) + public static DefinitionLocation CreateDocumentLocation(DocumentLocation location) { - return new DocumentDefinitionLocation(location, originationParts); + return new DocumentDefinitionLocation(location); } public static DefinitionLocation CreateSymbolLocation(ISymbol symbol, Project referencingProject) diff --git a/src/EditorFeatures/Core/Implementation/FindReferences/IDefinitionsAndReferencesFactory.cs b/src/EditorFeatures/Core/Implementation/FindReferences/IDefinitionsAndReferencesFactory.cs index 25b6988c271..4d3b6827711 100644 --- a/src/EditorFeatures/Core/Implementation/FindReferences/IDefinitionsAndReferencesFactory.cs +++ b/src/EditorFeatures/Core/Implementation/FindReferences/IDefinitionsAndReferencesFactory.cs @@ -157,32 +157,32 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol) var definition = referencedSymbol.Definition; var result = ImmutableArray.CreateBuilder(); - foreach (var location in locations) + // If it's a namespace, don't create any normal lcoation. Namespaces + // come from many different sources, but we'll only show a single + // root definition node for it. That node won't be navigable. + if (definition.Kind != SymbolKind.Namespace) { - if (location.IsInMetadata) + foreach (var location in locations) { - var firstSourceReferenceLocation = referencedSymbol.Locations.FirstOrDefault(); - if (firstSourceReferenceLocation != null) + if (location.IsInMetadata) { - result.Add(DefinitionLocation.CreateSymbolLocation( - definition, firstSourceReferenceLocation.Document.Project)); + var firstSourceReferenceLocation = referencedSymbol.Locations.FirstOrDefault(); + if (firstSourceReferenceLocation != null) + { + result.Add(DefinitionLocation.CreateSymbolLocation( + definition, firstSourceReferenceLocation.Document.Project)); + } } - } - else if (location.IsInSource) - { - var document = solution.GetDocument(location.SourceTree); - if (document != null) + else if (location.IsInSource) { - var documentLocation = new DocumentLocation(document, location.SourceSpan); - if (documentLocation.CanNavigateTo()) + var document = solution.GetDocument(location.SourceTree); + if (document != null) { - // If it's a namespace, don't show any origination. Namespaces - // come from many different sources, so we don't show anything. - // If it's not a namespace, then use the default origination parts. - var definitionLocation = definition.Kind == SymbolKind.Namespace - ? DefinitionLocation.CreateDocumentLocation(documentLocation, ImmutableArray.Empty) - : DefinitionLocation.CreateDocumentLocation(documentLocation); - result.Add(definitionLocation); + var documentLocation = new DocumentLocation(document, location.SourceSpan); + if (documentLocation.CanNavigateTo()) + { + result.Add(DefinitionLocation.CreateDocumentLocation(documentLocation)); + } } } } -- GitLab