From 7cf4e3b1e745be7913294f618ca0bfcbaec547de Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 17 Mar 2015 22:11:27 -0700 Subject: [PATCH] Allow NavigableItems to have child items. This will be used by TypeScript so it can display FindRefernces result in a tree form similar to how C#/VB does it. i.e. it can show results like: Decl1 |--Ref1 |--Ref2 Decl2 |--Ref3 |--Ref4 --- .../Extensibility/Navigation/INavigableItem.cs | 4 ++++ ...eItemFactory.DeclaredSymbolNavigableItem.cs | 2 ++ ...eItemFactory.SymbolLocationNavigableItem.cs | 3 +++ .../LibraryManager_FindReferences.cs | 2 +- .../LibraryManager_GoToDefinition.cs | 18 +++++++++++++++--- .../FindResults/TreeItems/AbstractTreeItem.cs | 4 ++++ .../TreeItems/ITreeItemWithReferenceCount.cs | 9 --------- .../TreeItems/MetadataDefinitionTreeItem.cs | 4 ++-- .../TreeItems/SourceDefinitionTreeItem.cs | 4 ++-- .../Core/Def/ServicesVisualStudio.csproj | 1 - 10 files changed, 33 insertions(+), 18 deletions(-) delete mode 100644 src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/ITreeItemWithReferenceCount.cs diff --git a/src/EditorFeatures/Core/Extensibility/Navigation/INavigableItem.cs b/src/EditorFeatures/Core/Extensibility/Navigation/INavigableItem.cs index 7044b959b85..bff104ca421 100644 --- a/src/EditorFeatures/Core/Extensibility/Navigation/INavigableItem.cs +++ b/src/EditorFeatures/Core/Extensibility/Navigation/INavigableItem.cs @@ -1,5 +1,7 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Editor.Navigation @@ -11,5 +13,7 @@ internal interface INavigableItem Document Document { get; } TextSpan SourceSpan { get; } + + ImmutableArray ChildItems { get; } } } diff --git a/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.DeclaredSymbolNavigableItem.cs b/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.DeclaredSymbolNavigableItem.cs index d2654499db2..96c6b6880e0 100644 --- a/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.DeclaredSymbolNavigableItem.cs +++ b/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.DeclaredSymbolNavigableItem.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using System.Threading; using Microsoft.CodeAnalysis.ErrorReporting; using Microsoft.CodeAnalysis.FindSymbols; @@ -20,6 +21,7 @@ internal class DeclaredSymbolNavigableItem : INavigableItem public Glyph Glyph => _lazySymbol.Value?.GetGlyph() ?? Glyph.Error; public TextSpan SourceSpan => _declaredSymbolInfo.Span; public ISymbol Symbol => _lazySymbol.Value; + public ImmutableArray ChildItems => ImmutableArray.Empty; private readonly DeclaredSymbolInfo _declaredSymbolInfo; private readonly Lazy _lazyDisplayName; diff --git a/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.SymbolLocationNavigableItem.cs b/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.SymbolLocationNavigableItem.cs index 26d54efd7c9..bc674f311ab 100644 --- a/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.SymbolLocationNavigableItem.cs +++ b/src/EditorFeatures/Core/Extensibility/Navigation/NavigableItemFactory.SymbolLocationNavigableItem.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; @@ -76,6 +77,8 @@ public TextSpan SourceSpan return _location.SourceSpan; } } + + public ImmutableArray ChildItems => ImmutableArray.Empty; } } } diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_FindReferences.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_FindReferences.cs index 92222829cca..997755a78b8 100644 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_FindReferences.cs +++ b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_FindReferences.cs @@ -60,7 +60,7 @@ private IList CreateFindReferencesItems(Solution solution, IEn definitions.Add(definitionItem); var referenceItems = CreateReferenceItems(solution, uniqueLocations, referencedSymbol.Locations.Select(loc => loc.Location), Glyph.Reference); definitionItem.Children.AddRange(referenceItems); - (definitionItem as ITreeItemWithReferenceCount)?.SetReferenceCount(referenceItems.Count); + definitionItem.SetReferenceCount(referenceItems.Count); } } diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_GoToDefinition.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_GoToDefinition.cs index 3e4a8fd1cc3..ccb9f80f200 100644 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_GoToDefinition.cs +++ b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/LibraryManager_GoToDefinition.cs @@ -2,10 +2,9 @@ using System.Collections.Generic; using System.Linq; -using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Editor.Navigation; -using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.VisualStudio.LanguageServices.Implementation.Utilities; +using Roslyn.Utilities; namespace Microsoft.VisualStudio.LanguageServices.Implementation.Library.FindResults { @@ -16,11 +15,24 @@ private IList CreateGoToDefinitionItems(IEnumerable items) { PresentObjectList(title, new ObjectList(CreateGoToDefinitionItems(items), this)); diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/AbstractTreeItem.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/AbstractTreeItem.cs index 5509c2cdf15..f8ac2671d8e 100644 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/AbstractTreeItem.cs +++ b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/AbstractTreeItem.cs @@ -96,5 +96,9 @@ private static string GetFileLocationsText(string fileName, string projectNameDi return string.Empty; } + + internal virtual void SetReferenceCount(int referenceCount) + { + } } } diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/ITreeItemWithReferenceCount.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/ITreeItemWithReferenceCount.cs deleted file mode 100644 index b4d91166d59..00000000000 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/ITreeItemWithReferenceCount.cs +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.LanguageServices.Implementation.Library.FindResults -{ - internal interface ITreeItemWithReferenceCount - { - void SetReferenceCount(int referenceCount); - } -} diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/MetadataDefinitionTreeItem.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/MetadataDefinitionTreeItem.cs index 633ae7eda82..c0dc5ad6a3e 100644 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/MetadataDefinitionTreeItem.cs +++ b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/MetadataDefinitionTreeItem.cs @@ -6,7 +6,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.Library.FindResults { - internal class MetadataDefinitionTreeItem : AbstractTreeItem, ITreeItemWithReferenceCount + internal class MetadataDefinitionTreeItem : AbstractTreeItem { private readonly string _assemblyName; private readonly string _symbolDefinition; @@ -40,7 +40,7 @@ public override int GoToSource() return VSConstants.E_FAIL; } - public void SetReferenceCount(int referenceCount) + internal override void SetReferenceCount(int referenceCount) { var referenceCountDisplay = referenceCount == 1 ? string.Format(ServicesVSResources.ReferenceCountSingular, referenceCount) diff --git a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/SourceDefinitionTreeItem.cs b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/SourceDefinitionTreeItem.cs index 543b3c4c541..a5a8f41ca65 100644 --- a/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/SourceDefinitionTreeItem.cs +++ b/src/VisualStudio/Core/Def/Implementation/Library/FindResults/TreeItems/SourceDefinitionTreeItem.cs @@ -5,7 +5,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.Library.FindResults { - internal class SourceDefinitionTreeItem : AbstractSourceTreeItem, ITreeItemWithReferenceCount + internal class SourceDefinitionTreeItem : AbstractSourceTreeItem { private readonly string _symbolDisplay; @@ -17,7 +17,7 @@ public SourceDefinitionTreeItem(Document document, TextSpan sourceSpan, ISymbol this.DisplayText = $"[{document.Project.Name}] {_symbolDisplay}"; } - public void SetReferenceCount(int referenceCount) + internal override void SetReferenceCount(int referenceCount) { var referenceCountDisplay = referenceCount == 1 ? string.Format(ServicesVSResources.ReferenceCountSingular, referenceCount) diff --git a/src/VisualStudio/Core/Def/ServicesVisualStudio.csproj b/src/VisualStudio/Core/Def/ServicesVisualStudio.csproj index a82621e9026..683dd85c5dd 100644 --- a/src/VisualStudio/Core/Def/ServicesVisualStudio.csproj +++ b/src/VisualStudio/Core/Def/ServicesVisualStudio.csproj @@ -24,7 +24,6 @@ - -- GitLab