diff --git a/src/EditorFeatures/Core/FindReferences/AbstractFindReferencesService.cs b/src/EditorFeatures/Core/FindReferences/AbstractFindReferencesService.cs index 38d6b6d8400d0883f1fb72be3e8b024f862c411f..fe99c7858e43633891e52da9e8ab02fc3c33160c 100644 --- a/src/EditorFeatures/Core/FindReferences/AbstractFindReferencesService.cs +++ b/src/EditorFeatures/Core/FindReferences/AbstractFindReferencesService.cs @@ -89,7 +89,7 @@ private bool TryDisplayReferences(Tuple, Solution> var solution = result.Item2; var factory = solution.Workspace.Services.GetService(); var definitionsAndReferences = factory.CreateDefinitionsAndReferences( - solution, result.Item1); + solution, result.Item1, includeHiddenLocations: false); foreach (var presenter in _referenceSymbolPresenters) { diff --git a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.ProgressAdapter.cs b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.ProgressAdapter.cs index 4ba183f5d6c5f494c969c8308300005d4ee62835..18799535d49b5ae8af1a7c039c74c3a524b8e252 100644 --- a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.ProgressAdapter.cs +++ b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.ProgressAdapter.cs @@ -40,7 +40,7 @@ public ProgressAdapter(Solution solution, IFindUsagesContext context) { _solution = solution; _context = context; - _definitionFactory = s => s.ToDefinitionItem(solution); + _definitionFactory = s => s.ToDefinitionItem(solution, includeHiddenLocations: false); } // Do nothing functions. The streaming far service doesn't care about @@ -77,7 +77,7 @@ public async Task OnReferenceFoundAsync(SymbolAndProjectId definition, Reference } var referenceItem = location.TryCreateSourceReferenceItem( - GetDefinitionItem(definition)); + GetDefinitionItem(definition), includeHiddenLocations: false); if (referenceItem != null) { diff --git a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.cs b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.cs index e15763a8319014070a3c5c5acfdebe0558eca47d..337952e0126c78fedf369a95b8445c34a299bba8 100644 --- a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.cs +++ b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.cs @@ -36,7 +36,8 @@ public async Task FindImplementationsAsync(Document document, int position, IFin foreach (var implementation in tuple.Value.implementations) { - var definitionItem = implementation.ToDefinitionItem(project.Solution); + var definitionItem = implementation.ToDefinitionItem( + project.Solution, includeHiddenLocations: false); await context.OnDefinitionFoundAsync(definitionItem).ConfigureAwait(false); } } diff --git a/src/EditorFeatures/Core/GoToDefinition/GoToDefinitionHelpers.cs b/src/EditorFeatures/Core/GoToDefinition/GoToDefinitionHelpers.cs index feb070177c1d61085a777c091689ef6148dc5410..89f25f30b66616e0f862b8399e94196100920040 100644 --- a/src/EditorFeatures/Core/GoToDefinition/GoToDefinitionHelpers.cs +++ b/src/EditorFeatures/Core/GoToDefinition/GoToDefinitionHelpers.cs @@ -112,7 +112,7 @@ internal static class GoToDefinitionHelpers return false; } - var definition = symbol.ToDefinitionItem(solution); + var definition = symbol.ToDefinitionItem(solution, includeHiddenLocations: false); var context = presenter.StartSearch(EditorFeaturesResources.Go_to_Definition); try { diff --git a/src/Features/Core/Portable/FindUsages/IDefinitionsAndReferencesFactory.cs b/src/Features/Core/Portable/FindUsages/IDefinitionsAndReferencesFactory.cs index 80a23337a6acc086618c8b018a38d12cec8bdb60..290652b795d5f17bd3dfc79b53bb314107b7f954 100644 --- a/src/Features/Core/Portable/FindUsages/IDefinitionsAndReferencesFactory.cs +++ b/src/Features/Core/Portable/FindUsages/IDefinitionsAndReferencesFactory.cs @@ -17,7 +17,7 @@ namespace Microsoft.CodeAnalysis.FindUsages internal interface IDefinitionsAndReferencesFactory : IWorkspaceService { DefinitionsAndReferences CreateDefinitionsAndReferences( - Solution solution, IEnumerable referencedSymbols); + Solution solution, IEnumerable referencedSymbols, bool includeHiddenLocations); DefinitionItem GetThirdPartyDefinitionItem(Solution solution, ISymbol definition); } @@ -26,7 +26,7 @@ internal interface IDefinitionsAndReferencesFactory : IWorkspaceService internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReferencesFactory { public DefinitionsAndReferences CreateDefinitionsAndReferences( - Solution solution, IEnumerable referencedSymbols) + Solution solution, IEnumerable referencedSymbols, bool includeHiddenLocations) { var definitions = ArrayBuilder.GetInstance(); var references = ArrayBuilder.GetInstance(); @@ -39,7 +39,8 @@ internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReference foreach (var referencedSymbol in referencedSymbols.OrderBy(GetPrecedence)) { ProcessReferencedSymbol( - solution, referencedSymbol, definitions, references, uniqueLocations); + solution, referencedSymbol, definitions, references, + includeHiddenLocations, uniqueLocations); } return new DefinitionsAndReferences( @@ -86,6 +87,7 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol) ReferencedSymbol referencedSymbol, ArrayBuilder definitions, ArrayBuilder references, + bool includeHiddenLocations, HashSet uniqueSpans) { // See if this is a symbol we even want to present to the user. If not, @@ -95,12 +97,15 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol) return; } - var definitionItem = referencedSymbol.Definition.ToDefinitionItem(solution, uniqueSpans); + var definitionItem = referencedSymbol.Definition.ToDefinitionItem( + solution, includeHiddenLocations, uniqueSpans); definitions.Add(definitionItem); // Now, create the SourceReferenceItems for all the reference locations // for this definition. - CreateReferences(referencedSymbol, references, definitionItem, uniqueSpans); + CreateReferences( + referencedSymbol, references, definitionItem, + includeHiddenLocations, uniqueSpans); // Finally, see if there are any third parties that want to add their // own result to our collection. @@ -125,11 +130,13 @@ private static int GetPrecedence(ReferencedSymbol referencedSymbol) ReferencedSymbol referencedSymbol, ArrayBuilder references, DefinitionItem definitionItem, + bool includeHiddenLocations, HashSet uniqueSpans) { foreach (var referenceLocation in referencedSymbol.Locations) { - var sourceReferenceItem = referenceLocation.TryCreateSourceReferenceItem(definitionItem); + var sourceReferenceItem = referenceLocation.TryCreateSourceReferenceItem( + definitionItem, includeHiddenLocations); if (sourceReferenceItem == null) { continue; @@ -148,6 +155,7 @@ internal static class DefinitionItemExtensions public static DefinitionItem ToDefinitionItem( this ISymbol definition, Solution solution, + bool includeHiddenLocations, HashSet uniqueSpans = null) { var displayParts = definition.ToDisplayParts(GetFormat(definition)).ToTaggedText(); @@ -170,8 +178,14 @@ internal static class DefinitionItemExtensions return DefinitionItem.CreateMetadataDefinition( tags, displayParts, solution, definition, displayIfNoReferences); } - else if (location.IsVisibleSourceLocation()) + else { + if (!location.IsVisibleSourceLocation() && + !includeHiddenLocations) + { + continue; + } + var document = solution.GetDocument(location.SourceTree); if (document != null) { @@ -209,12 +223,14 @@ internal static class DefinitionItemExtensions public static SourceReferenceItem TryCreateSourceReferenceItem( this ReferenceLocation referenceLocation, - DefinitionItem definitionItem) + DefinitionItem definitionItem, + bool includeHiddenLocations) { var location = referenceLocation.Location; Debug.Assert(location.IsInSource); - if (!location.IsVisibleSourceLocation()) + if (!location.IsVisibleSourceLocation() && + !includeHiddenLocations) { return null; } diff --git a/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs b/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs index 7837f7d643ad84ead02e281fc2074b1cad2e8e70..1b65162bb7da1f09732e7bdf260c41a558a1a010 100644 --- a/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs +++ b/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs @@ -233,7 +233,8 @@ public override bool TryFindAllReferences(ISymbol symbol, Project project, Cance Solution solution, IEnumerable referencedSymbols) { var service = this.Services.GetService(); - var definitionsAndReferences = service.CreateDefinitionsAndReferences(solution, referencedSymbols); + var definitionsAndReferences = service.CreateDefinitionsAndReferences( + solution, referencedSymbols, includeHiddenLocations: false); foreach (var presenter in _referencedSymbolsPresenters) { diff --git a/src/VisualStudio/Core/Test/FindResults/FindResultsTests.vb b/src/VisualStudio/Core/Test/FindResults/FindResultsTests.vb index bf153765e6b1e6ee67bab86d53e20382449647a8..41281643a5b6cfc7ea0c5135193d7da31af84fca 100644 --- a/src/VisualStudio/Core/Test/FindResults/FindResultsTests.vb +++ b/src/VisualStudio/Core/Test/FindResults/FindResultsTests.vb @@ -150,7 +150,8 @@ using System.Threading; Dim libraryManager = New LibraryManager(New MockServiceProvider(New MockComponentModel(workspace.ExportProvider))) Dim factory = workspace.Services.GetService(Of IDefinitionsAndReferencesFactory) - Dim definitionsAndReferences = factory.CreateDefinitionsAndReferences(workspace.CurrentSolution, result) + Dim definitionsAndReferences = factory.CreateDefinitionsAndReferences( + workspace.CurrentSolution, result, includeHiddenLocations:=False) Dim findReferencesTree = libraryManager.CreateFindReferencesItems(definitionsAndReferences) ' We cannot control the ordering of top-level nodes in the Find Symbol References window, so do not consider ordering of these items here.