提交 a416a123 编写于 作者: C Cyrus Najmabadi

Fix

上级 284db945
......@@ -38,7 +38,7 @@ protected AbstractFindUsagesService(IThreadingContext threadingContext)
return;
}
var (symbolAndProjectId, implementations, message) = tupleOpt.Value;
var (solution, symbolAndProjectId, implementations, message) = tupleOpt.Value;
if (message != null)
{
await context.ReportMessageAsync(message).ConfigureAwait(false);
......@@ -49,7 +49,6 @@ protected AbstractFindUsagesService(IThreadingContext threadingContext)
string.Format(EditorFeaturesResources._0_implementations,
FindUsagesHelpers.GetDisplayName(symbolAndProjectId.Symbol))).ConfigureAwait(false);
var solution = document.Project.Solution;
foreach (var implementation in implementations)
{
var definitionItem = await implementation.Symbol.ToClassifiedDefinitionItemAsync(
......@@ -122,18 +121,16 @@ protected AbstractFindUsagesService(IThreadingContext threadingContext)
cancellationToken.ThrowIfCancellationRequested();
// Find the symbol we want to search and the solution we want to search in.
var symbolAndProjectIdOpt = await FindUsagesHelpers.GetRelevantSymbolAndProjectIdAtPositionAsync(
var symbolAndProjectOpt = await FindUsagesHelpers.GetRelevantSymbolAndProjectAtPositionAsync(
document, position, cancellationToken).ConfigureAwait(false);
if (symbolAndProjectIdOpt == null)
if (symbolAndProjectOpt == null)
return;
var solution = document.Project.Solution;
var symbolAndProjectId = symbolAndProjectIdOpt.Value;
var (symbol, project) = symbolAndProjectOpt.Value;
await FindSymbolReferencesAsync(
_threadingContext, context,
symbolAndProjectId.Symbol,
solution.GetRequiredProject(symbolAndProjectId.ProjectId),
symbol, project,
cancellationToken).ConfigureAwait(false);
}
......
......@@ -31,7 +31,7 @@ public static string GetDisplayName(ISymbol symbol)
/// there may be symbol mapping involved (for example in Metadata-As-Source
/// scenarios).
/// </summary>
public static async Task<SymbolAndProjectId?> GetRelevantSymbolAndProjectIdAtPositionAsync(
public static async Task<(ISymbol symbol, Project project)?> GetRelevantSymbolAndProjectAtPositionAsync(
Document document, int position, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
......@@ -49,21 +49,23 @@ public static string GetDisplayName(ISymbol symbol)
if (mapping == null)
return null;
return new SymbolAndProjectId(mapping.Symbol, mapping.Project.Id);
return (mapping.Symbol, mapping.Project);
}
public static async Task<(SymbolAndProjectId symboAndProjectId, ImmutableArray<SymbolAndProjectId> implementations, string message)?> FindSourceImplementationsAsync(Document document, int position, CancellationToken cancellationToken)
public static async Task<(Solution solution, SymbolAndProjectId symboAndProjectId, ImmutableArray<SymbolAndProjectId> implementations, string message)?> FindSourceImplementationsAsync(Document document, int position, CancellationToken cancellationToken)
{
var symbolAndProjectIdOpt = await GetRelevantSymbolAndProjectIdAtPositionAsync(
var symbolAndProjectOpt = await GetRelevantSymbolAndProjectAtPositionAsync(
document, position, cancellationToken).ConfigureAwait(false);
if (symbolAndProjectIdOpt == null)
if (symbolAndProjectOpt == null)
return null;
var (symbol, project) = symbolAndProjectOpt.Value;
var symbolAndProjectId = new SymbolAndProjectId(symbol, project.Id);
return await FindSourceImplementationsAsync(
symbolAndProjectIdOpt.Value, document.Project.Solution, cancellationToken).ConfigureAwait(false);
symbolAndProjectId, project.Solution, cancellationToken).ConfigureAwait(false);
}
private static async Task<(SymbolAndProjectId symbolAndProjectId, ImmutableArray<SymbolAndProjectId> implementations, string message)?> FindSourceImplementationsAsync(
private static async Task<(Solution solution, SymbolAndProjectId symbolAndProjectId, ImmutableArray<SymbolAndProjectId> implementations, string message)?> FindSourceImplementationsAsync(
SymbolAndProjectId symbolAndProjectId, Solution solution, CancellationToken cancellationToken)
{
var builder = new HashSet<SymbolAndProjectId>(SymbolAndProjectIdComparer.SymbolEquivalenceInstance);
......@@ -86,8 +88,8 @@ public static async Task<(SymbolAndProjectId symboAndProjectId, ImmutableArray<S
var result = builder.ToImmutableArray();
return result.Length == 0
? (symbolAndProjectId, result, EditorFeaturesResources.The_symbol_has_no_implementations)
: (symbolAndProjectId, result, null);
? (solution, symbolAndProjectId, result, EditorFeaturesResources.The_symbol_has_no_implementations)
: (solution, symbolAndProjectId, result, null);
}
private static async Task<ImmutableArray<SymbolAndProjectId>> FindSourceImplementationsWorkerAsync(
......
......@@ -16,30 +16,24 @@ internal abstract partial class AbstractGoToBaseService : IGoToBaseService
public async Task FindBasesAsync(Document document, int position, IFindUsagesContext context)
{
var cancellationToken = context.CancellationToken;
var symbolAndProjectIdOpt = await FindUsagesHelpers.GetRelevantSymbolAndProjectIdAtPositionAsync(
var symbolAndProjectOpt = await FindUsagesHelpers.GetRelevantSymbolAndProjectAtPositionAsync(
document, position, cancellationToken).ConfigureAwait(false);
if (symbolAndProjectIdOpt == null)
if (symbolAndProjectOpt == null)
{
await context.ReportMessageAsync(
EditorFeaturesResources.Cannot_navigate_to_the_symbol_under_the_caret).ConfigureAwait(false);
return;
}
var solution = document.Project.Solution;
var symbolAndProjectId = symbolAndProjectIdOpt.Value;
var (symbol, project) = symbolAndProjectOpt.Value;
var bases = FindBaseHelpers.FindBases(
symbolAndProjectId.Symbol,
solution.GetRequiredProject(symbolAndProjectId.ProjectId),
cancellationToken);
symbol, project, cancellationToken);
await context.SetSearchTitleAsync(
string.Format(EditorFeaturesResources._0_bases,
FindUsagesHelpers.GetDisplayName(symbolAndProjectId.Symbol))).ConfigureAwait(false);
var project = document.Project;
var projectId = project.Id;
FindUsagesHelpers.GetDisplayName(symbol))).ConfigureAwait(false);
var found = false;
......@@ -49,11 +43,11 @@ public async Task FindBasesAsync(Document document, int position, IFindUsagesCon
foreach (var baseSymbol in bases)
{
var sourceDefinition = await SymbolFinder.FindSourceDefinitionAsync(
SymbolAndProjectId.Create(baseSymbol, projectId), solution, cancellationToken).ConfigureAwait(false);
SymbolAndProjectId.Create(baseSymbol, project.Id), project.Solution, cancellationToken).ConfigureAwait(false);
if (sourceDefinition.Symbol != null)
{
var definitionItem = await sourceDefinition.Symbol.ToClassifiedDefinitionItemAsync(
solution.GetProject(sourceDefinition.ProjectId), includeHiddenLocations: false,
project.Solution.GetProject(sourceDefinition.ProjectId), includeHiddenLocations: false,
FindReferencesSearchOptions.Default, cancellationToken: cancellationToken)
.ConfigureAwait(false);
await context.OnDefinitionFoundAsync(definitionItem).ConfigureAwait(false);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册