public DocumentId?GetDocumentId(SyntaxTree?syntaxTree) => _solution.GetDocumentId(syntaxTree, this.Id);
/// <summary> /// Gives the First Location for a given Symbol by ordering the locations using DocumentId first and Location starting position second /// </summary> private static async Task<Location> GetSymbolLocationAsync(Solution solution, ISymbol symbol, CancellationToken cancellationToken) { var locations = symbol.Locations; var originalsourcesymbol = await SymbolFinder.FindSourceDefinitionAsync(symbol, solution, cancellationToken).ConfigureAwait(false); if (originalsourcesymbol != null) { locations = originalsourcesymbol.Locations; } var orderedLocations = locations.OrderBy(l => l.IsInSource ? solution.GetDocumentId(l.SourceTree).Id : Guid.Empty) .ThenBy(l => l.IsInSource ? l.SourceSpan.Start : int.MaxValue); return orderedLocations.FirstOrDefault(); }
/// <summary> /// Get the documentId in this project with the specified syntax tree. /// </summary> public DocumentId GetDocumentId(SyntaxTree syntaxTree) { return(_solution.GetDocumentId(syntaxTree, this.Id)); }
public static async Task<RenameDeclarationLocationReference[]> CreateDeclarationLocationAnnotationsAsync( Solution solution, IEnumerable<ISymbol> symbols, CancellationToken cancellationToken) { var renameDeclarationLocations = new RenameDeclarationLocationReference[symbols.Count()]; int symbolIndex = 0; foreach (var symbol in symbols) { var locations = symbol.Locations; bool overriddenFromMetadata = false; if (symbol.IsOverride) { var overriddenSymbol = symbol.OverriddenMember(); if (overriddenSymbol != null) { overriddenSymbol = await SymbolFinder.FindSourceDefinitionAsync(overriddenSymbol, solution, cancellationToken).ConfigureAwait(false); overriddenFromMetadata = overriddenSymbol == null || overriddenSymbol.Locations.All(loc => loc.IsInMetadata); } } var location = await GetSymbolLocationAsync(solution, symbol, cancellationToken).ConfigureAwait(false); if (location != null && location.IsInSource) { renameDeclarationLocations[symbolIndex] = new RenameDeclarationLocationReference(solution.GetDocumentId(location.SourceTree), location.SourceSpan, overriddenFromMetadata, locations.Count()); } else { renameDeclarationLocations[symbolIndex] = new RenameDeclarationLocationReference(GetString(symbol), locations.Count()); } symbolIndex++; } return renameDeclarationLocations; }