提交 b8ef5303 编写于 作者: C CyrusNajmabadi

Get namespace right.

上级 d3975d34
......@@ -9,20 +9,14 @@ internal partial class DefinitionLocation
private sealed class DocumentDefinitionLocation : DefinitionLocation
{
private readonly DocumentLocation _location;
private readonly ImmutableArray<TaggedText> _originationParts;
public DocumentDefinitionLocation(
DocumentLocation location,
ImmutableArray<TaggedText> originationParts)
public DocumentDefinitionLocation(DocumentLocation location)
{
_location = location;
_originationParts = originationParts.IsDefault
? ImmutableArray.Create(new TaggedText(TextTags.Text, _location.Document.Project.Name))
: originationParts;
}
public override ImmutableArray<TaggedText> OriginationParts => _originationParts;
public override ImmutableArray<TaggedText> OriginationParts =>
ImmutableArray.Create(new TaggedText(TextTags.Text, _location.Document.Project.Name));
public override bool CanNavigateTo()
{
......
......@@ -29,10 +29,9 @@ protected DefinitionLocation()
public abstract bool CanNavigateTo();
public abstract bool TryNavigateTo();
public static DefinitionLocation CreateDocumentLocation(
DocumentLocation location, ImmutableArray<TaggedText> originationParts = default(ImmutableArray<TaggedText>))
public static DefinitionLocation CreateDocumentLocation(DocumentLocation location)
{
return new DocumentDefinitionLocation(location, originationParts);
return new DocumentDefinitionLocation(location);
}
public static DefinitionLocation CreateSymbolLocation(ISymbol symbol, Project referencingProject)
......
......@@ -157,32 +157,32 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol)
var definition = referencedSymbol.Definition;
var result = ImmutableArray.CreateBuilder<DefinitionLocation>();
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<TaggedText>.Empty)
: DefinitionLocation.CreateDocumentLocation(documentLocation);
result.Add(definitionLocation);
var documentLocation = new DocumentLocation(document, location.SourceSpan);
if (documentLocation.CanNavigateTo())
{
result.Add(DefinitionLocation.CreateDocumentLocation(documentLocation));
}
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册