提交 399edc2a 编写于 作者: C CyrusNajmabadi

Set an appropriate title on the FindRefs window in response to new editor change.

上级 85a3caf6
......@@ -69,6 +69,15 @@ internal class EditorFeaturesResources {
}
}
/// <summary>
/// Looks up a localized string similar to &apos;{0}&apos; declarations.
/// </summary>
internal static string _0_declarations {
get {
return ResourceManager.GetString("_0_declarations", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &apos;{0}&apos; does not support the &apos;{1}&apos; operation. However, it may contain nested &apos;{2}&apos;s (see &apos;{2}.{3}&apos;) that support this operation..
/// </summary>
......@@ -79,6 +88,15 @@ internal class EditorFeaturesResources {
}
}
/// <summary>
/// Looks up a localized string similar to &apos;{0}&apos; implementations.
/// </summary>
internal static string _0_implementations {
get {
return ResourceManager.GetString("_0_implementations", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} - (Line {1}).
/// </summary>
......@@ -88,6 +106,15 @@ internal class EditorFeaturesResources {
}
}
/// <summary>
/// Looks up a localized string similar to &apos;{0}&apos; references.
/// </summary>
internal static string _0_references {
get {
return ResourceManager.GetString("_0_references", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} unresolvable conflict(s).
/// </summary>
......
......@@ -745,4 +745,13 @@ Do you want to proceed?</value>
<data name="Suggestion_ellipses" xml:space="preserve">
<value>Suggestion ellipses (…)</value>
</data>
<data name="_0_references" xml:space="preserve">
<value>'{0}' references</value>
</data>
<data name="_0_implementations" xml:space="preserve">
<value>'{0}' implementations</value>
</data>
<data name="_0_declarations" xml:space="preserve">
<value>'{0}' declarations</value>
</data>
</root>
\ No newline at end of file
......@@ -44,7 +44,7 @@ internal abstract partial class AbstractFindReferencesService :
var symbol = symbolAndProject?.symbol;
var project = symbolAndProject?.project;
var displayName = GetDisplayName(symbol);
var displayName = FindUsagesHelpers.GetDisplayName(symbol);
waitContext.Message = string.Format(
EditorFeaturesResources.Finding_references_of_0, displayName);
......@@ -54,11 +54,6 @@ internal abstract partial class AbstractFindReferencesService :
return Tuple.Create(result, project.Solution);
}
public static string GetDisplayName(ISymbol symbol)
{
return symbol.IsConstructor() ? symbol.ContainingType.Name : symbol.Name;
}
public bool TryFindReferences(Document document, int position, IWaitContext waitContext)
{
var cancellationToken = waitContext.CancellationToken;
......
// 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.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.FindReferences;
using Microsoft.CodeAnalysis.Editor.GoToImplementation;
using Microsoft.CodeAnalysis.FindSymbols;
using Microsoft.CodeAnalysis.FindUsages;
......@@ -32,8 +27,10 @@ public async Task FindImplementationsAsync(Document document, int position, IFin
return;
}
var project = tuple.Value.project;
context.SetSearchTitle(string.Format(EditorFeaturesResources._0_implementations,
FindUsagesHelpers.GetDisplayName(tuple.Value.symbol)));
var project = tuple.Value.project;
foreach (var implementation in tuple.Value.implementations)
{
var definitionItem = implementation.ToDefinitionItem(
......@@ -79,8 +76,8 @@ public async Task FindImplementationsAsync(Document document, int position, IFin
var symbol = symbolAndProject?.symbol;
var project = symbolAndProject?.project;
var displayName = AbstractFindReferencesService.GetDisplayName(symbol);
context.SetSearchLabel(displayName);
context.SetSearchTitle(string.Format(EditorFeaturesResources._0_references,
FindUsagesHelpers.GetDisplayName(symbol)));
var progressAdapter = new ProgressAdapter(project.Solution, context);
......
......@@ -19,7 +19,7 @@ public virtual void ReportMessage(string message)
{
}
public virtual void SetSearchLabel(string displayName)
public virtual void SetSearchTitle(string title)
{
}
......
......@@ -14,6 +14,9 @@ namespace Microsoft.CodeAnalysis.Editor.FindUsages
{
internal static class FindUsagesHelpers
{
public static string GetDisplayName(ISymbol symbol)
=> symbol.IsConstructor() ? symbol.ContainingType.Name : symbol.Name;
/// <summary>
/// Common helper for both the synchronous and streaming versions of FAR.
/// It returns the symbol we want to search for and the solution we should
......
......@@ -17,7 +17,7 @@ internal interface IFindUsagesContext
/// <summary>
/// Set the title of the window that results are displayed in.
/// </summary>
void SetSearchLabel(string displayName);
void SetSearchTitle(string title);
Task OnDefinitionFoundAsync(DefinitionItem definition);
Task OnReferenceFoundAsync(SourceReferenceItem reference);
......
......@@ -29,10 +29,14 @@ public SimpleFindUsagesContext(CancellationToken cancellationToken)
}
public string Message { get; private set; }
public string SearchTitle { get; private set; }
public override void ReportMessage(string message)
=> Message = message;
public override void SetSearchTitle(string title)
=> SearchTitle = title;
public ImmutableArray<DefinitionItem> GetDefinitions()
{
lock (_gate)
......
......@@ -5,6 +5,8 @@
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CodeAnalysis.Editor.FindReferences;
using Microsoft.CodeAnalysis.Editor.FindUsages;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.FindSymbols;
using Microsoft.CodeAnalysis.FindUsages;
......@@ -69,9 +71,11 @@ internal static class GoToDefinitionHelpers
definitions.Add(symbol.ToDefinitionItem(solution, includeHiddenLocations: true));
var presenter = GetFindUsagesPresenter(streamingPresenters);
var title = string.Format(EditorFeaturesResources._0_declarations,
FindUsagesHelpers.GetDisplayName(symbol));
return presenter.TryNavigateToOrPresentItemsAsync(
EditorFeaturesResources.Go_to_Definition,
definitions.ToImmutableAndFree(),
title, definitions.ToImmutableAndFree(),
alwaysShowDeclarations: true).WaitAndGetResult(cancellationToken);
}
......
......@@ -125,7 +125,7 @@ private void ExecuteCommand(Document document, int caretPosition)
var definitionItems = goToImplContext.GetDefinitions();
streamingPresenter.TryNavigateToOrPresentItemsAsync(
EditorFeaturesResources.Go_To_Implementation, definitionItems,
goToImplContext.SearchTitle, definitionItems,
alwaysShowDeclarations: true).Wait(cancellationToken);
}
......
......@@ -5,6 +5,7 @@
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
......@@ -197,12 +198,23 @@ public IDisposable Subscribe(ITableDataSink sink)
#region FindUsagesContext overrides.
public override void SetSearchLabel(string displayName)
public override void SetSearchTitle(string title)
{
var labelProperty = _findReferencesWindow.GetType().GetProperty("Label");
if (labelProperty != null)
try
{
// Editor renamed their property from Label to Title, and made it public.
// However, we don't have access to that property yet until they publish
// their next SDK. In the meantime, use reflection to get at the right
// property.
var titleProperty = _findReferencesWindow.GetType().GetProperty(
"Title", BindingFlags.Public | BindingFlags.Instance);
if (titleProperty != null)
{
titleProperty.SetValue(_findReferencesWindow, title);
}
}
catch (Exception)
{
labelProperty.SetValue(_findReferencesWindow, displayName);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册